Как использовать конфигурацию ConfigMap с контроллером Helm NginX Ingress - Kubernetes - PullRequest
0 голосов
/ 26 февраля 2019

Я нашел документацию о том, как сконфигурировать ваш входной контроллер NginX с использованием ConfigMap: 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?

Ответы [ 5 ]

0 голосов
/ 15 июля 2019

Если вы использовали helm install для установки ingress-nginx, если не было передано явное значение, для которого ConfigMap должен смотреть контроллер nginx, значение по умолчанию выглядит так: {namespace} / {release-name} -nginx-ingress-контроллер.Это генерируется https://github.com/helm/charts/blob/1e074fc79d0f2ee085ea75bf9bacca9115633fa9/stable/nginx-ingress/templates/controller-deployment.yaml#L67. (см. Аналогично, если это неработающая ссылка).

Чтобы убедиться в этом, попробуйте найти команду, с которой вы установили диаграмму ingress-nginx, и добавьте * 1006.* в команду.Это покажет вам файлы yaml, сгенерированные Tiller для применения в кластере.Строка # 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 с этими деталями.Кто-то, кто знает больше, должен помочь им разобраться, чтобы людям не приходилось сталкиваться с этим без необходимости.

Приветствия, спасибо за ваш пост.

0 голосов
/ 26 февраля 2019

Когда вы применяете конфигурацию ConfigMap с необходимыми данными значения ключа, контроллер Ingress получает эту информацию и вставляет ее в исходный файл конфигурации nginx-ingress-controller вложенного модуля /etc/nginx/nginx.conf, поэтому впоследствии легко проверитьбыли ли значения ConfigMap успешно отражены или нет, путем проверки фактических nginx.conf внутри соответствующего модуля.

Вы также можете проверить журналы из соответствующего модуля nginx-ingress-controller, чтобы проверить, были ли данные ConfigMap уже загружены вbackend nginx.conf, или, если не выяснить причину.

0 голосов
/ 26 февраля 2019

То, что у вас есть, это входной yaml, а не yaml для развертывания контроллера Ingress, Ingress Controller - это модуль, который фактически выполняет свою работу и обычно представляет собой сам контейнер nginx.Пример такой конфигурации можно найти здесь в документации, которой вы поделились.

ОБНОВЛЕНИЕ

Используя этот пример, вы также можете использоватьследующий способ загрузки конфигурации в nginx с использованием карты конфигурации

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

nginx-config содержит вашу конфигурацию nginx как часть карты конфигурации

0 голосов
/ 26 февраля 2019

Мне удалось отобразить, что YAML исполняется Хелмом, используя опции: --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"

Список свойств конфигурации можно найти здесь .

0 голосов
/ 26 февраля 2019

Вы должны использовать его в манифесте развертывания входного контроллера

...