web-dev-qa-db-fra.com

Comment utiliser la configuration ConfigMap avec le contrôleur Helm NginX Ingress - Kubernetes

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?

12
NeverEndingQueue

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 .

9
NeverEndingQueue

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.

3
adnan kamili

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.

2
Yehuda Makarov

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

1
fatcook

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.

1
mk_sta

Vous devez l'utiliser dans le manifeste de déploiement du contrôleur d'entrée

0
P Ekambaram

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.

0
Kostas Demiris