web-dev-qa-db-ja.com

Helm NginX IngressコントローラーでConfigMap構成を使用する方法-Kubernetes

ConfigMapを使用してNginXイングレスコントローラーを構成する方法に関するドキュメントを見つけました: https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/

残念ながら、私のConfigMapをIngressコントローラーからロードする方法がわからず、どこにも見つかりませんでした。

私のイングレスコントローラー:

helm install --name ingress --namespace ingress-nginx --set rbac.create=true,controller.kind=DaemonSet,controller.service.type=ClusterIP,controller.hostNetwork=true stable/nginx-ingress

私の設定マップ:

kind: ConfigMap
apiVersion: v1
metadata:
  name: ingress-configmap
data:
  proxy-read-timeout: "86400s"
  client-max-body-size: "2g"
  use-http2: "false"

私のイングレス:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress
  annotations:
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
  tls:
    - hosts:
        - my.endpoint.net
      secretName: ingress-tls
  rules:
    - Host: my.endpoint.net
      http:
        paths:
          - path: /
            backend:
              serviceName: web
              servicePort: 443
          - path: /api
            backend:
              serviceName: api
              servicePort: 443

IngressでConfigMapから構成を読み込むにはどうすればよいですか?

12

YAMLがHelmによって実行される内容を次のように表示することができました:--dry-run --debug末尾のオプションhelm installコマンド。それから私はそこにコントローラが実行されていることに気づきました:--configmap={namespace-where-the-nginx-ingress-is-deployed}/{name-of-the-helm-chart}-nginx-ingress-controller。 ConfigMapをロードするには、それを独自のものでオーバーライドする必要があります(名前空間を確認してください)。

kind: ConfigMap
apiVersion: v1
metadata:
  name: {name-of-the-helm-chart}-nginx-ingress-controller
  namespace: {namespace-where-the-nginx-ingress-is-deployed}
data:
  proxy-read-timeout: "86400"
  proxy-body-size: "2g"
  use-http2: "false"

設定プロパティのリストは here にあります。

9

インストール時にconfig magプロパティを渡すこともできます。

helm install stable/nginx-ingress --name nginx-ingress --set controller.config.use-forwarded-headers='"true"'

注:文字列以外の値を機能させるには、二重引用符を一重引用符で囲む必要がありました。

3
adnan kamili

helm installを使用してingress-nginxをインストールした場合、nginxコントローラーが参照する必要があるConfigMapの明示的な値が渡されなかった場合、デフォルト値は{namespace}/{release-name} -nginx-のようになります。イングレスコントローラー。これは https://github.com/helm/charts/blob/1e074fc79d0f2ee085ea75bf9bacca9115633fa9/stable/nginx-ingress/templates/controller-deployment.yaml#L67 によって生成されます。 (デッドリンクの場合も同様です)。

自分で確認するには、ingress-nginxチャートをインストールしたコマンドを見つけて、コマンドに--dry-run --debugを追加します。これにより、Tillerによって生成され、クラスターに適用されるyamlファイルが表示されます。行# Source: nginx-ingress/templates/controller-deployment.yamlは、arg--configmap=であるコントローラーの展開を開始します。このargの値は、コントローラーが検知するConfigMapの名前である必要があり、それを使用して独自の.confファイルを更新します。これは明示的に渡すこともできますが、渡さない場合はデフォルト値になります。

右の名前でConfigMapが作成された場合、コントローラーのログには、コントローラーが構成の変更を取得し、それ自体を再ロードしたことが示されます。

これはkubectl logs <pod-name-of-controller> -n <namespace-arg-if-not-in-default-namespace>で確認できます。ログメッセージにConfiguration changes detected, backend reload required.というテキストが含まれていました。これらのログメッセージは、ConfigMap名が間違っていると表示されません。

これに関する公式のドキュメントは不必要に不足していると思いますが、おそらく私は間違っていますか?これらの詳細を記載したPRを送信しようとします。詳細を知っている人は、人々が不必要にこれにつまずく必要がないようにそれらを肉付けするのを助けるべきです。

乾杯、あなたの投稿をありがとう。

2
Yehuda Makarov

あなたが持っているのは、イングレスyamlであり、イングレスコントローラーデプロイメントyamlではありません。イングレスコントローラーは、実際に機能するポッドであり、通常はnginxコンテナー自体です。このような設定の例は、共有したドキュメントに here があります。

[〜#〜]更新[〜#〜]

提供されているその例を使用して、次の方法で構成マップを使用して構成をnginxにロードすることもできます

     volumeMounts:
      - name: nginx-config
        mountPath: /etc/nginx/nginx.conf
       subPath: nginx.conf
    volumes:
     - name: nginx-config
       configMap:
       name: nginx-config 

nginx-configには、構成マップの一部としてnginx構成が含まれています

1
fatcook

必要なKey-Valueデータを含む ConfigMap 構成を適用すると、Ingressコントローラーがこの情報を取得し、ネストされたnginx-ingress-controllerポッドの元の構成ファイル/etc/nginx/nginx.confに挿入するため、後で簡単に実行できます対応するポッド内の実際のnginx.confを確認して、ConfigMapの値が正常に反映されたかどうかを確認します。

また、関連するnginx-ingress-controllerポッドからログを確認して、ConfigMapデータがバックエンドnginx.confに既に再読み込みされているかどうかを確認することも、理由を調査しないこともできます。

1
mk_sta

あなたはそれをイングレスコントローラー展開マニフェストで使用する必要があります

0
P Ekambaram

上記の回答を読みましたが、うまくいきませんでした。

私のために働いたのは次のことでした:

release_name=tcp-udp-ic

# add the helm repo from NginX and update the chart
helm repo add nginx-stable https://helm.nginx.com/stable
helm repo update

echo "- Installing -${release_name}- into cluster ..."

#delete the config map if already exists
kubectl delete cm tcp-udp-ic-cm

helm del --purge ${release_name}
helm upgrade --install ${release_name} \
--set controller.image.tag=1.6.0 \
--set controller.config.name=tcp-udp-ic-cm \
nginx-stable/nginx-ingress --version 0.4.0 #--dry-run --debug

# update the /etc/nginx/nginx.conf file with my attributes, via the config map
kubectl apply -f tcp-udp-ic-cm.yaml

そしてその tcp-udp-ic-cm.yamlは:

kind: ConfigMap
apiVersion: v1
metadata:
  name: tcp-udp-ic-cm
  namespace: default
data:
  worker-connections : "10000"

基本的に、リリースをヘルムでデプロイし、使用するconfig-mapの名前を設定する必要があります。 Helmは構成マップを作成しますが、空です。次に、config-mapリソースを私の値で更新するために、config-mapファイルを適用します。このシーケンスは私が仕事をすることができる唯一のものです。

0
Kostas Demiris