高级 Helm Chart 自定义

先决条件

在开始之前,请检查以下先决条件

  1. 下载 Istio 版本.
  2. 执行任何必要的 平台特定设置
  3. 查看 Pod 和服务的必要条件
  4. 使用 helm 安装 Istio.
  5. 支持后渲染的 Helm 版本。(>= 3.1)
  6. kubectl 或 kustomize。

高级 Helm Chart 自定义

Istio 的 helm chart 尝试包含用户对其特定需求所需的大多数属性。但是,它不包含您可能想要调整的每个可能的 Kubernetes 值。虽然实施这种机制并不实用,但在此文档中,我们将演示一种方法,该方法允许您进行一些高级 helm chart 自定义,而无需直接修改 Istio 的 helm chart。

使用 Helm 和 kustomize 后渲染 Istio 图表

使用 Helm post-renderer 功能,您可以轻松地调整安装清单以满足您的需求。后渲染提供了在 Helm 安装渲染的清单之前操作、配置和/或验证它们的灵活性。这使具有高级配置需求的用户能够使用 Kustomize 等工具应用配置更改,而无需原始 chart 维护人员提供任何额外支持。

向现有图表添加值

在此示例中,我们将向 Istio 的 ingress-gateway 部署添加一个 sysctl 值。我们将要

  1. 创建一个 sysctl 部署自定义补丁模板。
  2. 使用 Helm 后渲染应用补丁。
  3. 验证 sysctl 补丁是否已正确应用于 Pod。

创建 Kustomization

首先,我们创建一个 sysctl 补丁文件,向 ingress-gateway Pod 的 securityContext 添加具有附加属性。

$ 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 模板渲染和验证

我们可以使用 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
这些信息是否有用?
您是否有任何改进建议?

感谢您的反馈!