- 安装Conduit
- 前提条件
- 部署
- Conduit inject
- 部署示例应用
- 参考
安装Conduit
本文档指导您如何在kubernetes上安装Conduit service mesh。
前提条件
- kubernetes版本为1.8或以上
用到的镜像如下:
- buoyantio/kubectl:v1.6.2
- gcr.io/runconduit/controller:v0.1.0
- gcr.io/runconduit/web:v0.1.0
- prom/prometheus:v1.8.1
其中位于gcr.io的镜像我备份到了DockerHub:
- jimmysong/runconduit-web:v0.1.0
- jimmysong/runconduit-controller:v0.1.0
另外两个镜像本身就可以从DockerHub上下载。
部署
到release页面上下载conduit的二进制文件。
使用conduit install命令生成了用于部署到kubernetes中yaml文件,然后修改文件中的镜像仓库地址为你自己的镜像地址。
conduit install>conduit-0.1.0.yaml# 修改完镜像地址执行kubectl apply -f conduit-0.1.0.yaml
修改后的yaml文件见:conduit-0.1.0.yaml。
注意:Conduit官方给出的yaml文件中不包括RBAC授权,我重新修改了,增加了RBAC和ServiceAccount。
使用kubectl proxy来开放外网访问conduit dashboard:
kubectl proxy --address='172.20.0.113' --port=8001 --accept-hosts='^*$'
在浏览器中访问http://172.20.0.113:8001/api/v1/namespaces/conduit/services/web:http/proxy/servicemesh将看到如下页面:

Conduit inject
Conduit注入的时候需要用到如下两个镜像:
- gcr.io/runconduit/proxy:v0.1.0
- gcr.io/runconduit/proxy-init:v0.1.0
我将其备份到了DockerHub:
- jimmysong/runconduit-proxy:v0.1.0
- jimmysong/runconduit-proxy-init:v0.1.0
查看conduit向yaml文件中注入了哪些配置,我们使用my-nginx.yaml为例:
conduit inject --init-image sz-pg-oam-docker-hub-001.tendcloud.com/library/runconduit-proxy-init --proxy-image sz-pg-oam-docker-hub-001.tendcloud.com/library/runconduit-proxy my-nginx.yaml|kubectl apply -f -
注意:只需要指定镜像名称即可,tag与使用的conduit server版本相同,会自动注入。
my-nginx.yaml的内容如下:
apiVersion: extensions/v1beta1kind: Deploymentmetadata:name: my-nginxspec:replicas: 2template:metadata:labels:run: my-nginxspec:containers:- name: my-nginximage: sz-pg-oam-docker-hub-001.tendcloud.com/library/nginx:1.9ports:- containerPort: 80---apiVersion: v1kind: Servicemetadata:name: my-nginxlabels:app: my-nginxspec:ports:- port: 80protocol: TCPname: httpselector:run: my-nginx
Conduit自动注入后生成的新的yaml文件内容如下:
apiVersion: extensions/v1beta1kind: Deploymentmetadata:creationTimestamp: nullname: my-nginxspec:replicas: 2strategy: {}template:metadata:annotations:conduit.io/created-by: conduit/cli v0.1.0conduit.io/proxy-version: v0.1.0creationTimestamp: nulllabels:conduit.io/controller: conduitconduit.io/plane: datarun: my-nginxspec:containers:- image: sz-pg-oam-docker-hub-001.tendcloud.com/library/nginx:1.9name: my-nginxports:- containerPort: 80resources: {}- env:- name: CONDUIT_PROXY_LOGvalue: trace,h2=debug,mio=info,tokio_core=info- name: CONDUIT_PROXY_CONTROL_URLvalue: tcp://proxy-api.conduit.svc.cluster.local:8086- name: CONDUIT_PROXY_CONTROL_LISTENERvalue: tcp://0.0.0.0:4190- name: CONDUIT_PROXY_PRIVATE_LISTENERvalue: tcp://127.0.0.1:4140- name: CONDUIT_PROXY_PUBLIC_LISTENERvalue: tcp://0.0.0.0:4143- name: CONDUIT_PROXY_NODE_NAMEvalueFrom:fieldRef:fieldPath: spec.nodeName- name: CONDUIT_PROXY_POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: CONDUIT_PROXY_POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespaceimage: sz-pg-oam-docker-hub-001.tendcloud.com/library/runconduit-proxy:v0.1.0imagePullPolicy: IfNotPresentname: conduit-proxyports:- containerPort: 4143name: conduit-proxyresources: {}securityContext:runAsUser: 2102initContainers:- args:- -p- "4143"- -o- "4140"- -i- "4190"- -u- "2102"image: sz-pg-oam-docker-hub-001.tendcloud.com/library/runconduit-proxy-init:v0.1.0imagePullPolicy: IfNotPresentname: conduit-initresources: {}securityContext:capabilities:add:- NET_ADMINprivileged: falsestatus: {}---apiVersion: v1kind: Servicemetadata:name: my-nginxlabels:app: my-nginxspec:ports:- port: 80protocol: TCPname: httpselector:run: my-nginx---
部署示例应用
使用下面的命令部署官方提供的示例应用:
curl https://raw.githubusercontent.com/rootsongjc/kubernetes-handbook/master/manifests/conduit/emojivoto.yml | conduit inject --init-image sz-pg-oam-docker-hub-001.tendcloud.com/library/runconduit-proxy-init --proxy-image sz-pg-oam-docker-hub-001.tendcloud.com/library/runconduit-proxy - --skip-inbound-ports=80 | kubectl apply -f -
注意:其中使用的镜像地址已经改为我的私有镜像仓库地址,大家使用时请注意修改。
参考
Getting started - conduit.io
