Linkerd,K8s和路由

我正试图让我的头在k8s和linkerd。 之前和领事之前我使用了docker-compose。

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

我在本地使用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 ,据我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" 

然后,我部署一个复制控制器与我build立的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 

当我然后inputminikube service l5d服务和linkerd显示,但我没有得到应显示的默认页面。

要testing是否一切正常,我build立另一个服务,直接指向端口8080,然后它的工作,但不是通过linkerd代理。

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

我们在链接器Slack中讨论了一些额外的细节。 问题不在于configuration本身,而在于主机头没有在请求中设置。

上面的configuration会根据主机头来路由,所以这个头必须对应一个服务名。 curl -H "Host: world" http://$IPADDRESS (或其他)将工作。

(也可以根据请求的其他位进行路由,例如HTTP请求中的URLpath。)

由于linkerd松弛频道和一些进一步的尝试,我设法弄清楚,并build立两个互相交谈,发布和获取数据的服务。 这只是为了得到linkerd的挂钩。 当我有一段时间的时候,我会写一个关于它的教程,让别人可以从中学习。

我错过了复制控制器中的kubectl代理:

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