3. 使用 Istio Sidecar 添加部署和服务

3. 使用 Istio Sidecar 添加部署和服务 - 图1先决条件:

要为工作负载启用 Istio,你必须先在集群和命名空间中安装 Istio 应用。

在命名空间中启用 Istio 只会为新工作负载启用自动 sidecar 注入。要为现有工作负载启用 Envoy sidecar,你需要手动为每个工作负载启用它。

要在命名空间中的现有工作负载上注入 Istio sidecar:

  1. 在左上角,单击 ☰ > 集群管理
  2. 集群页面上,转到要可视化的集群,然后单击 Explore
  3. 点击工作负载
  4. 转到要注入 Istio sidecar 的工作负载,然后单击 ⋮ > 重新部署。重新部署工作负载后,该工作负载会自动注入 Envoy sidecar。

等待几分钟,然后工作负载将升级并具有 Istio sidecar。单击它并转到容器。你应该能看到该工作负载旁边的 istio-proxy。这意味着为工作负载启用了 Istio sidecar。Istio 正在为 Sidecar Envoy 做所有的接线工作。如果你现在在 yaml 中启用它们,Istio 可以自动执行所有功能。

添加部署和服务

以下是在命名空间中添加新 Deployment 的几种方法:

  1. 点击 ☰ > 集群管理
  2. 选择你创建的集群,并点击 Explore
  3. 点击工作负载
  4. 单击创建
  5. 点击 Deployment
  6. 填写表单,或以 YAML 文件编辑
  7. 单击创建

要将 Service 添加到你的命名空间:

  1. 点击 ☰ > 集群管理
  2. 选择你创建的集群,并点击 Explore
  3. 点击服务发现 > 服务
  4. 单击创建
  5. 选择所需的服务类型。
  6. 填写表单,或以 YAML 文件编辑
  7. 点击创建

你还可以使用 kubectl shell 来创建 deployment 和 service:

  1. 如果你的文件存储在本地集群中,运行 kubectl create -f <name of service/deployment file>.yaml
  2. 或运行 cat<< EOF | kubectl apply -f -,将文件内容粘贴到终端,然后运行 EOF 来完成命令。

部署和服务示例

接下来,我们为 Istio 文档中的 BookInfo 应用的示例部署和服务添加 Kubernetes 资源:

  1. 点击 ☰ > 集群管理
  2. 选择你创建的集群,并点击 Explore
  3. 在顶部导航栏中,打开 kubectl shell。
  4. 运行 cat<< EOF | kubectl apply -f -
  5. 将以下资源复制到 shell 中。
  6. 运行 EOF

这将在 Istio 的示例 BookInfo 应用中设置以下示例资源:

Details 服务和部署:

  • 一个 details Service。
  • 一个 bookinfo-details 的 ServiceAccount。
  • 一个 details-v1 Deployment。

Ratings 服务和部署:

  • 一个 ratings Service。
  • 一个 bookinfo-ratings 的 ServiceAccount。
  • 一个 ratings-v1 Deployment。

Reviews 服务和部署(三个版本):

  • 一个 reviews Service。
  • 一个 bookinfo-reviews 的 ServiceAccount。
  • 一个 reviews-v1 Deployment。
  • 一个 reviews-v2 Deployment。
  • 一个 reviews-v3 Deployment。

Productpage 服务和部署:

这是应用的主页,可以通过网络浏览器中查看。将从该页面调用其他服务。

  • 一个 productpage service。
  • 一个 bookinfo-productpage 的 ServiceAccount。
  • 一个 productpage-v1 Deployment。

资源 YAML

  1. # Copyright 2017 Istio Authors
  2. #
  3. # Licensed under the Apache License, Version 2.0 (the "License");
  4. # you may not use this file except in compliance with the License.
  5. # You may obtain a copy of the License at
  6. #
  7. # http://www.apache.org/licenses/LICENSE-2.0
  8. #
  9. # Unless required by applicable law or agreed to in writing, software
  10. # distributed under the License is distributed on an "AS IS" BASIS,
  11. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. # See the License for the specific language governing permissions and
  13. # limitations under the License.
  14. ##################################################################################################
  15. # Details service
  16. ##################################################################################################
  17. apiVersion: v1
  18. kind: Service
  19. metadata:
  20. name: details
  21. labels:
  22. app: details
  23. service: details
  24. spec:
  25. ports:
  26. - port: 9080
  27. name: http
  28. selector:
  29. app: details
  30. ---
  31. apiVersion: v1
  32. kind: ServiceAccount
  33. metadata:
  34. name: bookinfo-details
  35. ---
  36. apiVersion: apps/v1
  37. kind: Deployment
  38. metadata:
  39. name: details-v1
  40. labels:
  41. app: details
  42. version: v1
  43. spec:
  44. replicas: 1
  45. selector:
  46. matchLabels:
  47. app: details
  48. version: v1
  49. template:
  50. metadata:
  51. labels:
  52. app: details
  53. version: v1
  54. spec:
  55. serviceAccountName: bookinfo-details
  56. containers:
  57. - name: details
  58. image: docker.io/istio/examples-bookinfo-details-v1:1.15.0
  59. imagePullPolicy: IfNotPresent
  60. ports:
  61. - containerPort: 9080
  62. ---
  63. ##################################################################################################
  64. # Ratings service
  65. ##################################################################################################
  66. apiVersion: v1
  67. kind: Service
  68. metadata:
  69. name: ratings
  70. labels:
  71. app: ratings
  72. service: ratings
  73. spec:
  74. ports:
  75. - port: 9080
  76. name: http
  77. selector:
  78. app: ratings
  79. ---
  80. apiVersion: v1
  81. kind: ServiceAccount
  82. metadata:
  83. name: bookinfo-ratings
  84. ---
  85. apiVersion: apps/v1
  86. kind: Deployment
  87. metadata:
  88. name: ratings-v1
  89. labels:
  90. app: ratings
  91. version: v1
  92. spec:
  93. replicas: 1
  94. selector:
  95. matchLabels:
  96. app: ratings
  97. version: v1
  98. template:
  99. metadata:
  100. labels:
  101. app: ratings
  102. version: v1
  103. spec:
  104. serviceAccountName: bookinfo-ratings
  105. containers:
  106. - name: ratings
  107. image: docker.io/istio/examples-bookinfo-ratings-v1:1.15.0
  108. imagePullPolicy: IfNotPresent
  109. ports:
  110. - containerPort: 9080
  111. ---
  112. ##################################################################################################
  113. # Reviews service
  114. ##################################################################################################
  115. apiVersion: v1
  116. kind: Service
  117. metadata:
  118. name: reviews
  119. labels:
  120. app: reviews
  121. service: reviews
  122. spec:
  123. ports:
  124. - port: 9080
  125. name: http
  126. selector:
  127. app: reviews
  128. ---
  129. apiVersion: v1
  130. kind: ServiceAccount
  131. metadata:
  132. name: bookinfo-reviews
  133. ---
  134. apiVersion: apps/v1
  135. kind: Deployment
  136. metadata:
  137. name: reviews-v1
  138. labels:
  139. app: reviews
  140. version: v1
  141. spec:
  142. replicas: 1
  143. selector:
  144. matchLabels:
  145. app: reviews
  146. version: v1
  147. template:
  148. metadata:
  149. labels:
  150. app: reviews
  151. version: v1
  152. spec:
  153. serviceAccountName: bookinfo-reviews
  154. containers:
  155. - name: reviews
  156. image: docker.io/istio/examples-bookinfo-reviews-v1:1.15.0
  157. imagePullPolicy: IfNotPresent
  158. ports:
  159. - containerPort: 9080
  160. ---
  161. apiVersion: apps/v1
  162. kind: Deployment
  163. metadata:
  164. name: reviews-v2
  165. labels:
  166. app: reviews
  167. version: v2
  168. spec:
  169. replicas: 1
  170. selector:
  171. matchLabels:
  172. app: reviews
  173. version: v2
  174. template:
  175. metadata:
  176. labels:
  177. app: reviews
  178. version: v2
  179. spec:
  180. serviceAccountName: bookinfo-reviews
  181. containers:
  182. - name: reviews
  183. image: docker.io/istio/examples-bookinfo-reviews-v2:1.15.0
  184. imagePullPolicy: IfNotPresent
  185. ports:
  186. - containerPort: 9080
  187. ---
  188. apiVersion: apps/v1
  189. kind: Deployment
  190. metadata:
  191. name: reviews-v3
  192. labels:
  193. app: reviews
  194. version: v3
  195. spec:
  196. replicas: 1
  197. selector:
  198. matchLabels:
  199. app: reviews
  200. version: v3
  201. template:
  202. metadata:
  203. labels:
  204. app: reviews
  205. version: v3
  206. spec:
  207. serviceAccountName: bookinfo-reviews
  208. containers:
  209. - name: reviews
  210. image: docker.io/istio/examples-bookinfo-reviews-v3:1.15.0
  211. imagePullPolicy: IfNotPresent
  212. ports:
  213. - containerPort: 9080
  214. ---
  215. ##################################################################################################
  216. # Productpage services
  217. ##################################################################################################
  218. apiVersion: v1
  219. kind: Service
  220. metadata:
  221. name: productpage
  222. labels:
  223. app: productpage
  224. service: productpage
  225. spec:
  226. ports:
  227. - port: 9080
  228. name: http
  229. selector:
  230. app: productpage
  231. ---
  232. apiVersion: v1
  233. kind: ServiceAccount
  234. metadata:
  235. name: bookinfo-productpage
  236. ---
  237. apiVersion: apps/v1
  238. kind: Deployment
  239. metadata:
  240. name: productpage-v1
  241. labels:
  242. app: productpage
  243. version: v1
  244. spec:
  245. replicas: 1
  246. selector:
  247. matchLabels:
  248. app: productpage
  249. version: v1
  250. template:
  251. metadata:
  252. labels:
  253. app: productpage
  254. version: v1
  255. spec:
  256. serviceAccountName: bookinfo-productpage
  257. containers:
  258. - name: productpage
  259. image: docker.io/istio/examples-bookinfo-productpage-v1:1.15.0
  260. imagePullPolicy: IfNotPresent
  261. ports:
  262. - containerPort: 9080
  263. ---

后续步骤

设置 Istio Gateway