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から構成を読み込むにはどうすればよいですか?
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 にあります。
インストール時にconfig magプロパティを渡すこともできます。
helm install stable/nginx-ingress --name nginx-ingress --set controller.config.use-forwarded-headers='"true"'
注:文字列以外の値を機能させるには、二重引用符を一重引用符で囲む必要がありました。
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を送信しようとします。詳細を知っている人は、人々が不必要にこれにつまずく必要がないようにそれらを肉付けするのを助けるべきです。
乾杯、あなたの投稿をありがとう。
あなたが持っているのは、イングレス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構成が含まれています
必要なKey-Valueデータを含む ConfigMap 構成を適用すると、Ingressコントローラーがこの情報を取得し、ネストされたnginx-ingress-controller
ポッドの元の構成ファイル/etc/nginx/nginx.conf
に挿入するため、後で簡単に実行できます対応するポッド内の実際のnginx.conf
を確認して、ConfigMapの値が正常に反映されたかどうかを確認します。
また、関連するnginx-ingress-controller
ポッドからログを確認して、ConfigMapデータがバックエンドnginx.conf
に既に再読み込みされているかどうかを確認することも、理由を調査しないこともできます。
あなたはそれをイングレスコントローラー展開マニフェストで使用する必要があります
上記の回答を読みましたが、うまくいきませんでした。
私のために働いたのは次のことでした:
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ファイルを適用します。このシーケンスは私が仕事をすることができる唯一のものです。