扩展 helm upgrade cmd 添加一些字段值

Extend helm upgrade cmd to add some field values

我正在使用修改后的 yaml 文件安装 ingress nginx

kubectl apply -f deploy.yaml

yaml 文件只是 original deploy file 但添加了用于部署的主机端口:

ports:
  - name: http
    containerPort: 80
    protocol: TCP
  - name: https
    containerPort: 443
    protocol: TCP
  - name: webhook
    containerPort: 8443
    protocol: TCP

成为:

ports:
  - name: http
    containerPort: 80
    protocol: TCP
    hostPort: 80 #<-- added
  - name: https
    containerPort: 443
    protocol: TCP
    hostPort: 443 #<-- added
  - name: webhook
    containerPort: 8443
    protocol: TCP
    hostPort: 8443 #<-- added

所以这对我有用。但我想 install 使用 helm 进入 nginx:

helm upgrade --install ingress-nginx ingress-nginx \
  --repo https://kubernetes.github.io/ingress-nginx \
  --namespace ingress-nginx --create-namespace

是否可以使用 helm (-f values.yml) 添加 hostPort 值?我需要在 Deployment.spec.template.containers.ports 中添加 hostPort,但是我在编写正确的 values.yml 文件时遇到两个问题:

values.yml

# How to access the deployment?
spec:
  template:
    containers:
      ports: # How to add field with existing containerPort value of each element in the array?

两种查找方式:

  1. 你可以仔细看看helm图本身https://github.com/kubernetes/ingress-nginx/blob/main/charts/ingress-nginx

    在这里你可以找到部署规范https://github.com/kubernetes/ingress-nginx/blob/main/charts/ingress-nginx/templates/controller-deployment.yaml

    在它下面,你可以看到,有一个条件可以启用 hostPort https://github.com/kubernetes/ingress-nginx/blob/main/charts/ingress-nginx/templates/controller-deployment.yaml#L113

  2. (正确的)总是挖掘 values.yaml https://github.com/kubernetes/ingress-nginx/blob/main/charts/ingress-nginx/values.yaml#L90

    和图表文档 https://github.com/kubernetes/ingress-nginx/blob/main/charts/ingress-nginx/README.md#:~:text=controller.hostPort.enabled

首先,您在 values.yaml 中已经有 hostPort。见 following fragment:

  ## Use host ports 80 and 443
  ## Disabled by default
  hostPort:
    # -- Enable 'hostPort' or not
    enabled: false
    ports:
      # -- 'hostPort' http port
      http: 80
      # -- 'hostPort' https port
      https: 443

您应该在 values.yaml:

中打开它
  ## Use host ports 80 and 443
  ## Disabled by default
  hostPort:
    # -- Enable 'hostPort' or not
    enabled: true

毕竟 - 如您所知 - 您可以通过 helm 安装您的入口。

helm install -f values.yaml

关于 webhook - 请参阅 here


您也可以在部署文件中找到 hostPortHere 是模板之一 (controller-deployment.yaml):

在此文件中,您可以找到 hostPort 的三个外观(值 controller.hostPort.enabled - 负责启用或禁用 hostPort)。

Here:

              {{- if $.Values.controller.hostPort.enabled }}
              hostPort: {{ index $.Values.controller.hostPort.ports $key | default $value }}
              {{- end }}

here:

          {{- range $key, $value := .Values.tcp }}
            - name: {{ $key }}-tcp
              containerPort: {{ $key }}
              protocol: TCP
              {{- if $.Values.controller.hostPort.enabled }}
              hostPort: {{ $key }}
              {{- end }}
          {{- end }}
          {{- range $key, $value := .Values.udp }}
            - name: {{ $key }}-udp
              containerPort: {{ $key }}
              protocol: UDP
              {{- if $.Values.controller.hostPort.enabled }}
              hostPort: {{ $key }}
              {{- end }}
          {{- end }}

另请参阅:

  1. ingress-nginx Documentation on Github
  2. nginx Documentation
  3. NGINX - Helm Charts
  4. Helm Documentation