• 安装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文件,然后修改文件中的镜像仓库地址为你自己的镜像地址。

    1. conduit install>conduit-0.1.0.yaml
    2. # 修改完镜像地址执行
    3. kubectl apply -f conduit-0.1.0.yaml

    注意:Conduit官方给出的yaml文件中不包括RBAC授权,我重新修改了,增加了RBAC和ServiceAccount。

    使用kubectl proxy来开放外网访问conduit dashboard:

    1. 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 dashboard

    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为例:

    1. conduit inject --init-image harbor-001.jimmysong.io/library/runconduit-proxy-init --proxy-image harbor-001.jimmysong.io/library/runconduit-proxy my-nginx.yaml|kubectl apply -f -

    注意:只需要指定镜像名称即可,tag与使用的conduit server版本相同,会自动注入。

    my-nginx.yaml的内容如下:

    1. apiVersion: extensions/v1beta1
    2. kind: Deployment
    3. metadata:
    4. name: my-nginx
    5. spec:
    6. replicas: 2
    7. template:
    8. metadata:
    9. labels:
    10. run: my-nginx
    11. spec:
    12. containers:
    13. - name: my-nginx
    14. image: harbor-001.jimmysong.io/library/nginx:1.9
    15. ports:
    16. - containerPort: 80
    17. ---
    18. apiVersion: v1
    19. kind: Service
    20. metadata:
    21. name: my-nginx
    22. labels:
    23. app: my-nginx
    24. spec:
    25. ports:
    26. - port: 80
    27. protocol: TCP
    28. name: http
    29. selector:
    30. run: my-nginx

    Conduit自动注入后生成的新的yaml文件内容如下:

    1. apiVersion: extensions/v1beta1
    2. kind: Deployment
    3. metadata:
    4. creationTimestamp: null
    5. name: my-nginx
    6. spec:
    7. replicas: 2
    8. strategy: {}
    9. template:
    10. metadata:
    11. annotations:
    12. conduit.io/created-by: conduit/cli v0.1.0
    13. conduit.io/proxy-version: v0.1.0
    14. creationTimestamp: null
    15. labels:
    16. conduit.io/controller: conduit
    17. conduit.io/plane: data
    18. run: my-nginx
    19. spec:
    20. containers:
    21. - image: harbor-001.jimmysong.io/library/nginx:1.9
    22. name: my-nginx
    23. ports:
    24. - containerPort: 80
    25. resources: {}
    26. - env:
    27. - name: CONDUIT_PROXY_LOG
    28. value: trace,h2=debug,mio=info,tokio_core=info
    29. - name: CONDUIT_PROXY_CONTROL_URL
    30. value: tcp://proxy-api.conduit.svc.cluster.local:8086
    31. - name: CONDUIT_PROXY_CONTROL_LISTENER
    32. value: tcp://0.0.0.0:4190
    33. - name: CONDUIT_PROXY_PRIVATE_LISTENER
    34. value: tcp://127.0.0.1:4140
    35. - name: CONDUIT_PROXY_PUBLIC_LISTENER
    36. value: tcp://0.0.0.0:4143
    37. - name: CONDUIT_PROXY_NODE_NAME
    38. valueFrom:
    39. fieldRef:
    40. fieldPath: spec.nodeName
    41. - name: CONDUIT_PROXY_POD_NAME
    42. valueFrom:
    43. fieldRef:
    44. fieldPath: metadata.name
    45. - name: CONDUIT_PROXY_POD_NAMESPACE
    46. valueFrom:
    47. fieldRef:
    48. fieldPath: metadata.namespace
    49. image: harbor-001.jimmysong.io/library/runconduit-proxy:v0.1.0
    50. imagePullPolicy: IfNotPresent
    51. name: conduit-proxy
    52. ports:
    53. - containerPort: 4143
    54. name: conduit-proxy
    55. resources: {}
    56. securityContext:
    57. runAsUser: 2102
    58. initContainers:
    59. - args:
    60. - -p
    61. - "4143"
    62. - -o
    63. - "4140"
    64. - -i
    65. - "4190"
    66. - -u
    67. - "2102"
    68. image: harbor-001.jimmysong.io/library/runconduit-proxy-init:v0.1.0
    69. imagePullPolicy: IfNotPresent
    70. name: conduit-init
    71. resources: {}
    72. securityContext:
    73. capabilities:
    74. add:
    75. - NET_ADMIN
    76. privileged: false
    77. status: {}
    78. ---
    79. apiVersion: v1
    80. kind: Service
    81. metadata:
    82. name: my-nginx
    83. labels:
    84. app: my-nginx
    85. spec:
    86. ports:
    87. - port: 80
    88. protocol: TCP
    89. name: http
    90. selector:
    91. run: my-nginx
    92. ---

    部署示例应用

    使用下面的命令部署官方提供的示例应用:

    1. curl https://raw.githubusercontent.com/rootsongjc/kubernetes-handbook/master/manifests/conduit/emojivoto.yml | conduit inject --init-image harbor-001.jimmysong.io/library/runconduit-proxy-init --proxy-image harbor-001.jimmysong.io/library/runconduit-proxy - --skip-inbound-ports=80 | kubectl apply -f -

    注意:其中使用的镜像地址已经改为我的私有镜像仓库地址,大家使用时请注意修改。

    参考

    • Getting started - conduit.io