進階 Helm Chart 自訂

先決條件

在開始之前,請檢查以下先決條件

  1. 下載 Istio 版本.
  2. 執行任何必要的平台特定設定
  3. 檢查Pod 和服務的需求
  4. 使用 Helm 安裝 Istio.
  5. 支援後渲染的 Helm 版本。(>= 3.1)
  6. kubectl 或 kustomize。

進階 Helm Chart 自訂

Istio 的 Helm 圖表嘗試納入使用者針對其特定需求所需的大部分屬性。但是,它不包含您可能想要調整的每個可能的 Kubernetes 值。雖然擁有這樣的機制並不實際,但在此文件中,我們將示範一種方法,讓您可以進行一些進階的 Helm 圖表自訂,而無需直接修改 Istio 的 Helm 圖表。

使用 Helm 和 kustomize 來後渲染 Istio 圖表

使用 Helm 的 post-renderer 功能,您可以輕鬆調整安裝清單以滿足您的需求。Post-rendering 提供了彈性,讓您可以在 Helm 安裝之前操作、配置和/或驗證渲染後的清單。這讓具有進階配置需求的用戶可以使用像 Kustomize 這樣的工具來應用配置變更,而無需原始 Chart 維護者的任何額外支援。

將值新增至已存在的圖表

在這個範例中,我們將為 Istio 的 ingress-gateway 部署新增一個 sysctl 值。我們將會:

  1. 建立一個 sysctl 部署自訂修補程式範本。
  2. 使用 Helm post-rendering 應用修補程式。
  3. 驗證 sysctl 修補程式是否已正確應用到 Pod。

建立 Kustomization

首先,我們建立一個 sysctl 修補程式檔案,將一個 securityContext 新增到 ingress-gateway Pod,並帶有額外的屬性。

$ cat > sysctl-ingress-gw-customization.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: istio-ingress
  namespace: istio-ingress
spec:
  template:
    spec:
      securityContext:
          sysctls:
          - name: net.netfilter.nf_conntrack_tcp_timeout_close_wait
            value: "10"
EOF

下面的 Shell 腳本有助於橋接 Helm post-renderer 和 Kustomize 之間的差距,因為前者使用 stdin/stdout,而後者則使用檔案。

$ cat > kustomize.sh <<EOF
#!/bin/sh
cat > base.yaml
exec kubectl kustomize # you can also use "kustomize build ." if you have it installed.
EOF
$ chmod +x ./kustomize.sh

最後,讓我們建立 kustomization yaml 檔案,這是 kustomize 的輸入,包含資源集合和相關的自訂詳細資訊。

$ cat > kustomization.yaml <<EOF
resources:
- base.yaml
patchesStrategicMerge:
- sysctl-ingress-gw-customization.yaml
EOF

套用 Kustomization

現在 Kustomization 檔案已準備就緒,讓我們使用 Helm 來確保它能正確應用。

新增 Istio 的 Helm 儲存庫

$ helm repo add istio https://istio-release.storage.googleapis.com/charts
$ helm repo update

使用 Helm Template 渲染和驗證

我們可以使用 Helm post-renderer 來驗證渲染後的清單,然後再由 Helm 安裝。

$ helm template istio-ingress istio/gateway --namespace istio-ingress --post-renderer ./kustomize.sh | grep -B 2 -A 1 netfilter.nf_conntrack_tcp_timeout_close_wait

在輸出中,檢查 ingress-gateway Pod 是否新增了 sysctl 屬性。

securityContext:
  sysctls:
  - name: net.netfilter.nf_conntrack_tcp_timeout_close_wait
    value: "10"

使用 Helm Post-Renderer 套用修補程式

使用以下命令安裝 Istio ingress-gateway,使用 Helm post-renderer 應用我們的自訂設定。

$ kubectl create ns istio-ingress
$ helm upgrade -i istio-ingress istio/gateway --namespace istio-ingress --wait --post-renderer ./kustomize.sh

驗證 Kustomization

檢查 ingress-gateway 部署,您將看到新操作的 sysctl 值。

$ kubectl -n istio-ingress get deployment istio-ingress -o yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  …
  name: istio-ingress
  namespace: istio-ingress
spec:
  template:
    metadata:
      …
    spec:
      securityContext:
        sysctls:
        - name: net.netfilter.nf_conntrack_tcp_timeout_close_wait
          value: "10"

其他資訊

有關本文件中描述的概念和技術的更多詳細資訊,請參閱:

  1. IstioOperator - 自訂安裝
  2. 進階 Helm 技術
  3. Kustomize
此資訊是否有用?
您有任何改進建議嗎?

感謝您的回饋!