Docker 链接器、k8s和路由

Docker 链接器、k8s和路由,docker,kubernetes,linkerd,Docker,Kubernetes,Linkerd,我现在正试图了解k8s和Linkeder。我以前使用过docker compose和Concur 我还没有完全弄清楚我做错了什么,所以如果有人能检查一下逻辑,看看错误在哪里,我会很高兴 我在本地使用minikube,希望使用GCE进行部署 我基本上是想得到一个简单的容器,它运行一个在k8s和linkerd中运行的节点应用程序,但是对于某些原因,我无法让路由正常工作 config.yaml apiVersion: v1 kind: ConfigMap metadata: name: l5d-c

我现在正试图了解k8s和Linkeder。我以前使用过docker compose和Concur

我还没有完全弄清楚我做错了什么,所以如果有人能检查一下逻辑,看看错误在哪里,我会很高兴

我在本地使用
minikube
,希望使用GCE进行部署

我基本上是想得到一个简单的容器,它运行一个在k8s和linkerd中运行的节点应用程序,但是对于某些原因,我无法让路由正常工作

config.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: l5d-config
data:
  config.yaml: |-
    admin:
      port: 9990

    namers:
    - kind: io.l5d.k8s
      experimental: true
      host: localhost
      port: 8001

    routers:
    - protocol: http
      label: outgoing
      baseDtab: |
        /srv        => /#/io.l5d.k8s/default/http;
        /host       => /srv;
        /http/*/*   => /host;
        /host/world => /srv/world-v1;
      interpreter:
        kind: default
        transformers:
        - kind: io.l5d.k8s.daemonset
          namespace: default
          port: incoming
          service: l5d
      servers:
      - port: 4140
        ip: 0.0.0.0

    - protocol: http
      label: incoming
      baseDtab: |
        /srv        => /#/io.l5d.k8s/default/http;
        /host       => /srv;
        /http/*/*   => /host;
        /host/world => /srv/world-v1;
      interpreter:
        kind: default
        transformers:
        - kind: io.l5d.k8s.localnode
      servers:
      - port: 4141
        ip: 0.0.0.0
然后我部署了一个
deamonset
,我从中了解到,这是使用
linkerd

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  labels:
    app: l5d
  name: l5d
spec:
  template:
    metadata:
      labels:
        app: l5d
    spec:
      volumes:
      - name: l5d-config
        configMap:
          name: "l5d-config"
      containers:
      - name: l5d
        image: buoyantio/linkerd:0.8.6
        env:
        - name: POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        args:
        - /io.buoyant/linkerd/config/config.yaml
        ports:
        - name: outgoing
          containerPort: 4140
          hostPort: 4140
        - name: incoming
          containerPort: 4141
        - name: admin
          containerPort: 9990
        volumeMounts:
        - name: "l5d-config"
          mountPath: "/io.buoyant/linkerd/config"
          readOnly: true

      - name: kubectl
        image: buoyantio/kubectl:v1.4.0
        args:
        - "proxy"
        - "-p"
        - "8001"
然后,我使用我构建的docker容器部署一个复制控制器:

apiVersion: v1
kind: ReplicationController
metadata:
  name: testservice
spec:
  replicas: 3
  selector:
    app: hello
  template:
    metadata:
      labels:
        app: hello
    spec:
      dnsPolicy: ClusterFirst
      containers:
      - name: service
        image: eu.gcr.io/xxxx/testservice:1.0
        env:
        - name: NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        - name: POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        - name: http_proxy
          value: $(NODE_NAME):4140
        command:
        - "pm2-docker"
        - "processes.json"
        ports:
        - name: service
          containerPort: 8080
然后,当我进入
minikube服务l5d
时,将显示服务和链接,但我没有得到应该显示的默认页面

为了测试是否一切正常,我构建了另一个直接指向8080端口的服务,然后它就可以工作了,但不是通过Linkedr代理


有人能发现错误吗?提前非常感谢。

我们在Linkedr Slack中讨论了这一点,并提供了一些额外的细节。问题不在于配置本身,而在于没有在请求上设置主机头

上述配置将基于主机头进行路由,因此此头必须对应于服务名称
curl-H“Host:world”http://$IPADDRESS
(或其他任何内容)可以工作


(也可以基于请求的其他位进行路由,例如HTTP请求中的URL路径。)

我们在linkerd Slack中讨论了这一点,并提供了一些其他详细信息。问题不在于配置本身,而在于没有在请求上设置主机头

上述配置将基于主机头进行路由,因此此头必须对应于服务名称
curl-H“Host:world”http://$IPADDRESS
(或其他任何内容)可以工作


(也可以基于请求的其他位进行路由,例如HTTP请求的URL路径。)

多亏了Linkedr slack通道和进一步的尝试,我设法找到了答案,并构建了两个相互通信、发布和获取数据的服务。这只是为了掌握Linkedr的窍门。当我有时间的时候,我会写一篇关于它的教程,以便其他人可以从中学习

我的复制控制器中缺少kubectl代理:

- name: kubectl
  image: buoyantio/kubectl:1.2.3
  args:
   - proxy
   - "-p"
   - "8001"

多亏了Linkedr slack频道和一些进一步的尝试,我设法找到了答案,并构建了两个相互对话、发布和获取数据的服务。这只是为了掌握Linkedr的窍门。当我有时间的时候,我会写一篇关于它的教程,以便其他人可以从中学习

我的复制控制器中缺少kubectl代理:

- name: kubectl
  image: buoyantio/kubectl:1.2.3
  args:
   - proxy
   - "-p"
   - "8001"

我无法回答您的问题,但我认为没有必要向Kubernetes添加服务发现工具,因为它有自己的功能。这只是增加了另一个复杂的层次,可能会打破。我脑海中出现的唯一原因是出于迁移目的。我无法回答您的问题,但我认为没有必要向Kubernetes添加服务发现工具,因为它有自己的功能。这只是增加了另一个复杂的层次,可能会打破。我想到的唯一原因是为了迁移。