做者 崔秀龍 | 2300字 | 閱讀大約須要5分鐘 | 歸檔於istio | 發表於 2018-06-04git
標籤 #Istio #Helm #Chart,來自 https://servicemesher.github.io/blog/helm-chart-for-istio-0.8/github
兒童節期間,拖拉了一個多月的 Istio 0.8 正式發佈了,這多是 Istio 1.0 以前的最後一個 LTS 版本,意義重大。docker
新版本中,原來的 Kubernetes 安裝文件 install/kubernetes/istio.yaml
,變成了 install/kubernetes/istio-demo.yaml
,是的,你沒看錯,這個 LTS 的安裝文件名字叫 demo。查看了一下文檔,大概察覺到不靠譜的 Istio 發佈組的意圖了:這個項目的組件相對比較複雜,原有的一些選項是靠 ConfigMap 以及 istioctl 分別調整的,如今經過從新設計的 Helm Chart,安裝選項用 values.yml 或者 helm 命令行的方式來進行集中管理了。下面就由看看 Istio 的 Helm Chart 的安裝部署及其結構。安全
安裝包內的 Helm 目錄中包含了 Istio 的 Chart,官方提供了兩種方法:網絡
很明顯,兩種方法並無什麼本質區別。例如第一個命令:架構
helm template install/kubernetes/helm/istio \ --name istio --namespace \ istio-system > $HOME/istio.yaml
這裏說的是使用 install/kubernetes/helm/istio
目錄中的 Chart 進行渲染,生成的內容保存到 $HOME/istio.yaml
文件之中。而第二個命令ide
helm template install/kubernetes/helm/istio \ --name istio --namespace istio-system \ --set sidecarInjectorWebhook.enabled=false > $HOME/istio.yaml
只是設置了 Chart 中的一個變量 sidecarInjectorWebhook.enabled
爲 False。從而禁止自動注入屬性生效。模塊化
咱們照貓畫虎,看看命令二的結果提交到 Kubernetes 中會發生什麼事情。post
helm template install/kubernetes/helm/istio --name istio \ --namespace istio-system --set sidecarInjectorWebhook.enabled=false > $HOME/istio.yaml kubectl create namespace istio-system kubectl create -f $HOME/istio.yaml
根據不一樣的網絡狀況,可能須要幾分鐘的等待,最後會看到這些 Pod 在運行:ui
istio-citadel-ff5696f6f-h4rdz istio-cleanup-old-ca-rp5p6 istio-egressgateway-58d98d898c-5jnpz istio-ingress-6fb78f687f-wsl5q istio-ingressgateway-6bc7c7c4bc-hhrh7 istio-mixer-post-install-d2kl5 istio-pilot-6c5c6b586c-dqv2w istio-policy-5c7fbb4b9f-xmv6f istio-statsd-prom-bridge-6dbb7dcc7f-27tx7 istio-telemetry-54b5bf4847-9gpr7 prometheus-586d95b8d9-gb846
下面的配置項目,均可以使用 helm 的 --set key=value
來設置,能夠重複使用,用來設置多個值。
選項 | 說明 | 缺省值 |
---|---|---|
global.hub | 絕大部分鏡像所在的鏡像庫地址 | docker.io/istionightly |
global.tag | Istio 使用的絕大部分鏡像的 Tag | circleci-nightly |
global.proxy.image | 指定 Proxy 的鏡像名稱 | proxyv2 |
global.imagePullPolicy | 鏡像拉取策略 | IfNotPresent |
global.controlPlaneSecurityEnabled | 控制面是否啓動 mTLS | false |
global.mtls.enabled | 服務間是否缺省啓用 mTLS | false |
global.mtls.mtlsExcludedServices | 禁用 mTLS 的 FQDN 列表 | - kubernetes.default.svc.cluster.local |
global.rbacEnabled | 是否建立 RBAC 規則 | true |
global.refreshInterval | Mesh 發現間隔 | 10s |
global.arch.amd64 | amd64 架構中的調度策略,0:never;1: least preferred;2:no preference;3:most preferred | 2 |
global.arch.s390x | amd64 架構中的調度策略,0:never;1: least preferred;2:no preference;3:most preferred | 2 |
global.arch.ppc64le | amd64 架構中的調度策略,0:never;1: least preferred;2:no preference;3:most preferred | 2 |
galley.enabled | 是否安裝 Galley 用於進行服務端的配置驗證,須要 1.9 版本以上的 Kubernetes | false |
上面的內容來自官方文檔,其實這是不符合實際狀況的(Istio 用戶的平常)。在 install/kubernetes/helm/istio/values.yaml
中,包含這一發行版本中的全部的缺省值。能夠直接修改或者新建 values.yaml,並在 helm 命令行使用 -f my-values.yaml
參數來生成自行定製的 istio.yaml
打開 Istio 的 Chart 以後,發現其中並無任何組件的內容,只有兩個 Configmap 對象的模板。其安裝主體再次很非主流的經過依賴 Chart 的方式實現了徹底的模塊化。所以這個 Chart 的主體,其實是 requirements.yaml
,打開這個文件,會看到規規矩矩的列出不少模塊,例如:
- name: sidecarInjectorWebhook version: 0.8.0 # repository: file://../sidecarInjectorWebhook condition: sidecarInjectorWebhook.enabled
這代表在 sidecarInjectorWebhook
取值爲 enabled
的時候,就渲染這一模板。所以這裏能夠看作是模塊的啓用停用的控制點。這裏列出的模塊包括:
模塊 | 描述 |
---|---|
egressgateway | 外發流量網關 |
galley | 在 K8S 服務端驗證 Istio 的 CRD 資源的合法性 |
grafana | Dashboard |
ingress | Ingress Controller |
ingressgateway | Ingress Gateway |
mixer | Mixer |
pilot | Pilot |
prometheus | Prometheus |
security | 安全相關內容 |
servicegraph | 調用關係圖 |
sidecarInjectorWebhook | 自動注入 |
tracing | Zipkin Jeager 的跟蹤服務 |
下面逐一作一下簡要說明
外發通訊的網關。
他的設置保存在 values.yaml
的 egressgateway
一節中(都是保存在同名分支下,後面再也不重複)。部署內容包括:
可定製項目包括:
以前的 istio 版本中,只能經過 istioctl 驗證 Istio 相關 CRD 的有效性,這個模塊提供一個在服務端驗證 CRD 的方法,他的部署內容包含:
校驗目標包含 Pilot(例如 destinationpolicies 和 routerules) 和 Mixer(例如 memquotas 和 prometheuses) 兩類 CRD。
一個帶有 Istio 定製 Dashboard 的 Grafana 封裝。
實際上將其鏡像中的 Dashboard 複製出來就能夠在其餘 Grafana 實例上運行了。
定製內容的 grafana.ingress.*
中包含 Ingress 的配置,用於外網訪問。
Istio 的 Ingress Controller
具體部署內容和 egresscontroller 基本一致。
0.8.0 新增功能,爲 Ingress 通訊提供 Istio rules/destination 等特性。
部署內容和 ingress 相似。
Mixer 負責的是遙測和前置檢查,他的 Chart 相對比較複雜,部署內容包括:
crds.yaml
中包含了 mixer 所支持的全部 crd 定義(例如 memquotas 和 prometheuses)。create-custom-resources-job.yaml
中包含了用於建立 crd 的 Job 對象。Pilot 承上啓下,負責服務發現和向 Proxy 下發配置。除了常規的 Deployment 和 Service 以外,還包含了 crds.yaml
,用於聲明 CRD 資源類型(例如 destinationpolicies 和 routerules)。
這個組件跟前面的 Grafana 相似,也是一個預約義的鏡像。這個模板中的 Configmap 就是 Prometheus 的抓取配置,能夠直接用到其餘的 Prometheus 實例之中。
舊版本中的 Istio-ca
Security 部分的部署內容包括:
Service Graph 支持,和 Grafana 基本一致。
這一部分的功能是自動爲 K8S 對象注入 Envoy。主要包含:
MutatingWebhookConfiguration
對象,會監聽 Pod 的建立事件,用於自動注入。Jeager 的跟蹤支持,整體狀況跟 Prometheus 和 Grafana 等監控組件相似,配置項和暴露服務方面稍有區別: