J'ai trouvé une documentation sur la façon de configurer votre contrôleur d'entrée NginX à l'aide de ConfigMap: https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/
Malheureusement, je n'ai aucune idée et je n'ai trouvé nulle part comment charger ce ConfigMap depuis mon contrôleur Ingress.
Mon contrôleur d'entrée:
helm install --name ingress --namespace ingress-nginx --set rbac.create=true,controller.kind=DaemonSet,controller.service.type=ClusterIP,controller.hostNetwork=true stable/nginx-ingress
Ma carte de configuration:
kind: ConfigMap
apiVersion: v1
metadata:
name: ingress-configmap
data:
proxy-read-timeout: "86400s"
client-max-body-size: "2g"
use-http2: "false"
Mon entrée:
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
Comment puis-je faire mon entrée pour charger la configuration à partir de ConfigMap?
J'ai réussi à afficher ce que YAML est exécuté par Helm en utilisant: --dry-run --debug
options à la fin de helm install
commande. Ensuite, j'ai remarqué que le contrôleur est exécuté avec: --configmap={namespace-where-the-nginx-ingress-is-deployed}/{name-of-the-helm-chart}-nginx-ingress-controller
. Afin de charger votre ConfigMap, vous devez le remplacer par le vôtre (consultez l'espace de noms).
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"
La liste des propriétés de configuration peut être trouvée ici .
On peut aussi transmettre les propriétés du mag config au moment de l'installation:
helm install stable/nginx-ingress --name nginx-ingress --set controller.config.use-forwarded-headers='"true"'
REMARQUE: pour les valeurs non-chaîne, il fallait utiliser des guillemets simples autour des guillemets doubles pour le faire fonctionner.
Si vous avez utilisé helm install
pour installer ingress-nginx, si aucune valeur explicite pour laquelle ConfigMap le contrôleur nginx doit regarder n'a été transmise, la valeur par défaut semble être {namespace}/{release-name} -nginx-ingress-controller. Ceci est généré par https://github.com/helm/charts/blob/1e074fc79d0f2ee085ea75bf9bacca9115633fa9/stable/nginx-ingress/templates/controller-deployment.yaml#L67 . (Voir similaire s'il s'agit d'un lien mort).
Pour vérifier par vous-même, essayez de trouver votre commande avec laquelle vous avez installé le graphique ingress-nginx et ajoutez --dry-run --debug
à la commande. Cela vous montrera les fichiers yaml générés par Tiller à appliquer au cluster. La ligne # Source: nginx-ingress/templates/controller-deployment.yaml
commence le déploiement du contrôleur qui a un arg
de --configmap=
. La valeur de ce arg
est ce qui doit être le nom du ConfigMap pour que le contrôleur le détecte et l'utilise pour mettre à jour son propre .conf
fichier. Cela pourrait être passé explicitement, mais s'il ne l'est pas, il aura une valeur par défaut.
Si un ConfigMap est créé avec le nom DROIT, les journaux du contrôleur montreront qu'il a détecté la modification de configuration et s'est rechargé.
Cela peut être vérifié avec kubectl logs <pod-name-of-controller> -n <namespace-arg-if-not-in-default-namespace>
. Mes messages de journal contenaient le texte Configuration changes detected, backend reload required.
Ces messages de journal ne seront pas présents si le nom de ConfigMap était incorrect.
Je crois que la documentation officielle à ce sujet manque inutilement, mais peut-être que je me trompe? J'essaierai de soumettre un PR avec ces détails. Quelqu'un qui en sait plus devrait aider à les étoffer afin que les gens n'aient pas besoin de trébucher dessus inutilement.
A bientôt, merci pour votre message.
Ce que vous avez est un yaml d'entrée et non un yaml de déploiement de contrôleur d'entrée, le contrôleur d'entrée est le pod qui fait le travail et est généralement un conteneur nginx lui-même. Un exemple d'une telle configuration peut être trouvé ici dans la documentation que vous avez partagée.
[~ # ~] mise à jour [~ # ~]
En utilisant cet exemple fourni, vous pouvez également utiliser la méthode suivante pour charger la configuration dans nginx en utilisant la carte de configuration
volumeMounts:
- name: nginx-config
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf
volumes:
- name: nginx-config
configMap:
name: nginx-config
nginx-config contient votre configuration nginx dans le cadre de la carte de configuration
Lorsque vous appliquez la configuration ConfigMap avec les données de valeur-clé nécessaires, le contrôleur Ingress récupère ces informations et les insère dans le fichier de configuration d'origine du pod nginx-ingress-controller
Imbriqué /etc/nginx/nginx.conf
, Donc c'est facile après pour vérifier si les valeurs de ConfigMap ont été correctement reflétées ou non, en vérifiant le nginx.conf
réel à l'intérieur du pod correspondant.
Vous pouvez également consulter les journaux du pod nginx-ingress-controller
Correspondant afin de vérifier si les données ConfigMap ont déjà été rechargées dans le backend nginx.conf
, Ou si ce n'est pas le cas, d'en rechercher la raison.
Vous devez l'utiliser dans le manifeste de déploiement du contrôleur d'entrée
J'ai lu les réponses ci-dessus mais je n'ai pas pu le faire fonctionner.
Ce qui a fonctionné pour moi était le suivant:
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
et le tcp-udp-ic-cm.yaml
est :
kind: ConfigMap
apiVersion: v1
metadata:
name: tcp-udp-ic-cm
namespace: default
data:
worker-connections : "10000"
Essentiellement, je dois déployer avec Helm la version et définir le nom de la config-map qui va utiliser. Helm crée la config-map mais vide. Ensuite, j'applique le fichier config-map afin de mettre à jour la ressource config-map avec mes valeurs. Cette séquence est la seule que j'ai pu faire fonctionner.