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"