Рейтинг:1

Обновление диаграммы ingress-nginx helm для kubernetes 1.23.5

флаг be

У меня много проблем, которые, кажется, связаны с обновлением моего кластера kubernetes до последней версии (1.23.5). Сначала у меня были некоторые проблемы с самим кластером и узлами, но это, кажется, исправлено, и кластер кажется здоровым, по крайней мере, он говорит, что когда я запускаю kops проверяет кластер. Проблема, с которой я столкнулся сейчас, заключается в том, что мои модули ingress-nginx не работают, что означает, что моему балансировщику нагрузки не на что указывать, и поэтому я не могу получить доступ к своему приложению, даже если модули приложений работают без проблем. Я использовал helm для создания ресурсов ingress-nginx и вставлю файлы, которые я пытаюсь использовать ниже для обновления. Я пробовал несколько вещей вокруг этого, и я думаю, что главное, чего мне не хватает, - это материал IngressClass, и я пытался включить его в несколько мест, но я не вижу, как это сделать.В моем кластере есть только один входной контроллер, и в развертывании для каждого экземпляра приложения определен экземпляр Ingress. Вы также увидите, что версия AppVersion — 0.24.0, я пытался изменить ее несколькими способами и использовать разные образы в файле deployment.yaml.

rbac.yml

апиВерсия: v1
тип: ServiceAccount
метаданные:
  имя: {{ .Chart.Name }}-serviceaccount

---
apiVersion: rbac.authorization.k8s.io/v1
вид: Кластерроле
метаданные:
  имя: {{ .Chart.Name }}-кластерная роль
правила:
  - апигруппы:
      - ""
    Ресурсы:
      - карты конфигурации
      - конечные точки
      - узлы
      - стручки
      - секреты
    глаголы:
      - список
      - смотреть
  - апигруппы:
      - ""
    Ресурсы:
      - узлы
    глаголы:
      - получать
  - апигруппы:
      - ""
    Ресурсы:
      - Сервисы
    глаголы:
      - получать
      - список
      - смотреть
  - апигруппы:
      - "расширения"
    Ресурсы:
      - входы
    глаголы:
      - получать
      - список
      - смотреть
  - апигруппы:
      - ""
    Ресурсы:
      - События
    глаголы:
      - Создайте
      - пластырь
  - апигруппы:
      - "расширения"
    Ресурсы:
      - входы/статус
    глаголы:
      - Обновить

---
apiVersion: rbac.authorization.k8s.io/v1
вид: роль
метаданные:
  имя: {{ .Chart.Name }}-роль
правила:
  - апигруппы:
      - ""
    Ресурсы:
      - карты конфигурации
      - стручки
      - секреты
      - пространства имен
    глаголы:
      - получать
  - апигруппы:
      - ""
    Ресурсы:
      - карты конфигурации
    имена ресурсов:
      # По умолчанию "<идентификатор-выбора>-<класс-входа>"
      # Здесь: "<входной-контроллер-лидер>-<nginx>"
      # Это должно быть адаптировано, если вы изменяете любой параметр
      # при запуске nginx-ingress-controller.
      - "вход-контроллер-лидер-nginx"
    глаголы:
      - получать
      - Обновить
  - апигруппы:
      - ""
    Ресурсы:
      - карты конфигурации
    глаголы:
      - Создайте
  - апигруппы:
      - ""
    Ресурсы:
      - конечные точки
    глаголы:
      - получать

---
apiVersion: rbac.authorization.k8s.io/v1
вид: привязка ролей
метаданные:
  имя: {{ .Chart.Name }}-nisa-binding
РольСсылка:
  apiGroup: rbac.authorization.k8s.io
  вид: роль
  имя: {{ .Chart.Name }}-роль
предметы:
  - вид: ServiceAccount
    имя: {{ .Chart.Name }}-serviceaccount
    пространство имен: {{ .Release.Namespace }}

---
apiVersion: rbac.authorization.k8s.io/v1
вид: Кластерролебиндинг
метаданные:
  имя: {{ .Chart.Name }}-clusterrole-nisa-binding
РольСсылка:
  apiGroup: rbac.authorization.k8s.io
  вид: Кластерроле
  имя: {{ .Chart.Name }}-кластерная роль
предметы:
  - вид: ServiceAccount
    имя: {{ .Chart.Name }}-serviceaccount
    пространство имен: {{ .Release.Namespace }}

сервис.yaml

---
# Основной сервис, принимающий http-трафик
вид: сервис
апиВерсия: v1
метаданные:
  имя: loadbalancer-вход
  этикетки:
    app.kubernetes.io/managed-by: Хелм
  аннотации:
    {{- если .Values.loadbalancer.cert }}
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: {{ .Values.loadbalancer.cert | цитировать }}
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "{{- range .Values.loadbalancer.ports -}}{{- if .ssl -}}{{ .name }},{{ - конец -}}{{- конец -}}"
    {{- конец }}
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: {{ .Values.loadbalancer.backend_protocol | цитировать }}
    service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: «60»
спецификация:
  тип: LoadBalancer
  селектор: 
    модуль: {{ .Chart.Name }}
  порты:
    {{- диапазон .Values.loadbalancer.ports }}
    - имя: {{ .имя }}
      порт: {{ .порт }}
      целевой порт: {{ .targetPort }}
    {{- конец }}

---
# Фиктивная служба, чтобы контроллер не беспокоился о службе ingress-nginx
вид: сервис
апиВерсия: v1
метаданные:
  имя: вход-nginx
  этикетки:
    app.kubernetes.io/managed-by: Хелм
спецификация:
  порты:
  - имя: http
    порт: 10254
    целевой порт: 10254
  селектор:
    модуль: {{ .Chart.Name }}
---

развертывание.yaml

---
apiVersion: приложения/v1
вид: DaemonSet
метаданные:
  имя: {{ .Chart.Name }}-контроллер
спецификация:
  селектор:
    метки соответствия:
      модуль: {{ .Chart.Name }}
  шаблон:
    метаданные:
      этикетки:
        модуль: {{ .Chart.Name }}
      аннотации:
        prometheus.io/порт: "10254"
        prometheus.io/scrape: "правда"
        fluentbit.io/парсер: k8s-nginx-вход
    спецификация:
      serviceAccountName: {{ .Chart.Name }}-serviceaccount
      контейнеры:
        - имя: {{ .Chart.Name }}-контроллер
          изображение: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:{{ .Chart.AppVersion }}
          аргументы:
            - /nginx-вход-контроллер
            --configmap=$(POD_NAMESPACE)/{{ .Chart.Name }}-nginx-configuration
            - --tcp-services-configmap=$(POD_NAMESPACE)/{{ .Chart.Name }}-tcp-services
            --udp-services-configmap=$(POD_NAMESPACE)/{{ .Chart.Name }}-udp-services
            --publish-service=$(POD_NAMESPACE)/loadbalancer-вход
            --annotations-prefix=nginx.ingress.kubernetes.io
          безопасностьКонтекст:
            allowPrivilegeEscalation: правда
            возможности:
              уронить:
                - ВСЕ
              Добавлять:
                - NET_BIND_SERVICE
            # www-данные -> 33
            RunAsUser: 33
          среда:
            - имя: POD_NAME
              значениеОт:
                fieldRef:
                  fieldPath: метаданные.имя
            - имя: POD_NAMESPACE
              значениеОт:
                fieldRef:
                  fieldPath: метаданные.имяпространство
          порты:
            - имя: http
              контейнерПорт: 80
            - название: метрики
              контейнерПорт: 10254
          живостьзонд:
            порог отказа: 3
            httpПолучить:
              путь: /healthz
              порт: 10254
              схема: HTTP
            начальные секунды задержки: 10
            периодСекунды: 10
            Порог успеха: 1
            тайм-аутСекунды: 10
          готовностьзонд:
            порог отказа: 3
            httpПолучить:
              путь: /healthz
              порт: 10254
              схема: HTTP
            периодСекунды: 10
            Порог успеха: 1
            тайм-аутСекунды: 10

configmap.yaml

---
вид: карта конфигурации
апиВерсия: v1
метаданные:
  имя: {{ .Chart.Name }}-nginx-configuration
данные:
  использовать прокси-протокол: «ложь»
  использовать перенаправленные заголовки: «истина»
  серверные токены: "false"

---
вид: карта конфигурации
апиВерсия: v1
метаданные:
  имя: {{ .Chart.Name }}-tcp-сервисы

---
вид: карта конфигурации
апиВерсия: v1
метаданные:
  имя: {{ .Chart.Name }}-udp-services

Диаграмма.yaml

имя: вход-nginx
описание: Кластер — Контроллер входящего трафика
версия: 1
апиВерсия: v1

версия приложения: "0.24.0"

значения.yaml

балансировщик нагрузки:
  внутренний_протокол: http
  сертификат: <мой-сертификат>
  порты:
    - имя: http
      порт: 80
      целевой порт: 80
      SSL: ложь
    - имя: https
      порт: 443
      целевой порт: 80
      SSL: правда

Команда, которую я запускаю.

helm обновить ingress-nginx --install --namespace ingress-nginx ./

Вывод, который я сейчас получаю.

W0327 19:53:47.472827 8 client_config.go:614] Ни --kubeconfig, ни --master не были указаны. С помощью inClusterConfig. Это может не сработать.
I0327 19:53:47.473136 8 main.go:241] "Создание клиента API" host="https://100.64.0.1:443"
I0327 19:53:47.487201 8 main.go:285] «Выполнение в кластере Kubernetes» major="1" minor="23" git="v1.23.5" state="clean" commit="c285e781331a3785a7f436042c65c5641ce8a9e9" platform="linux /амд64"
I0327 19:53:47.684135 8 main.go:105] «Создан поддельный SSL-сертификат» file="/etc/ingress-controller/ssl/default-fake-certificate.pem"
I0327 19:53:47.689215 8 main.go:115] «Включение новых функций Ingress, доступных начиная с Kubernetes v1.18»
E0327 19:53:47.692044 8 main.go:124] «Поиск IngressClass» err="ingressclasses.networking.k8s.io \"nginx\" запрещен: Пользователь \"system:serviceaccount:ingress-nginx:ingress-nginx- serviceaccount\" не может получить ресурс \"ingressclasses\" в группе API \"networking.k8s.io\" в области кластера" class="nginx"
W0327 19:53:47.692070 8 main.go:127] Ресурс IngressClass с именем nginx не найден. Будет использоваться только аннотация.
I0327 19:53:47.739577 8 nginx.go:254] «Запуск контроллера входа NGINX»
I0327 19:53:47.755865 8 event.go:282] Event(v1.ObjectReference{Вид: "ConfigMap", пространство имен: "ingress-nginx", имя: "ingress-nginx-tcp-services", UID: "6115a34f- 4f95-4f99-970a-b65477e45808", APIVersion: "v1", ResourceVersion: "103400810", FieldPath: ""}): тип: "Нормальная" причина: "СОЗДАТЬ" ConfigMap ingress-nginx/ingress-nginx-tcp-services
I0327 19:53:47.756010 8 event.go:282] Event(v1.ObjectReference{Вид: "ConfigMap", пространство имен: "ingress-nginx", имя: "ingress-nginx-udp-services", UID: "fa04d653- a070-4934-a606-a60a7f98ad6a", APIVersion: "v1", ResourceVersion: "103400812", FieldPath: ""}): тип: "Нормальная" причина: "СОЗДАТЬ" ConfigMap ingress-nginx/ingress-nginx-udp-services
I0327 19:53:47.756196 8 event.go:282] Event(v1.ObjectReference{Вид: "ConfigMap", пространство имен: "ingress-nginx", имя: "ingress-nginx-nginx-configuration", UID: "3af77ed0- e71c-49e9-bac3-b7c3fada40df", APIVersion: "v1", ResourceVersion: "103400808", FieldPath: ""}): тип: "Нормальный" причина: "СОЗДАТЬ" ConfigMap ingress-nginx/ingress-nginx-nginx-configuration
E0327 19:53:48.844980 8 Reflector.go:138] k8s.io/[email protected]/tools/cache/reflector.go:167: Не удалось просмотреть *v1beta1.Ingress: не удалось просмотреть *v1beta1.Ingress : сервер не смог найти запрошенный ресурс
E0327 19:53:50.385656 8 Reflector.go:138] k8s.io/[email protected]/tools/cache/reflector.go:167: Не удалось просмотреть *v1beta1.Ingress: не удалось просмотреть *v1beta1.Ingress : сервер не смог найти запрошенный ресурс
E0327 19:53:52.811461 8 Reflector.go:138] k8s.io/[email protected]/tools/cache/reflector.go:167: Не удалось просмотреть *v1beta1.Ingress: не удалось просмотреть *v1beta1.Ingress : сервер не смог найти запрошенный ресурс
E0327 19:53:57.052727 8 Reflector.go:138] k8s.io/[email protected]/tools/cache/reflector.go:167: Не удалось просмотреть *v1beta1.Ingress: не удалось просмотреть *v1beta1.Ingress : сервер не смог найти запрошенный ресурс
E0327 19:54:05.784219 8 Reflector.go:138] k8s.io/[email protected]/tools/cache/reflector.go:167: Не удалось просмотреть *v1beta1.Ingress: не удалось просмотреть *v1beta1.Ingress : сервер не смог найти запрошенный ресурс
I0327 19:54:26.690574 8 main.go:187] «Получен SIGTERM, завершение работы»
I0327 19:54:26.690593 8 nginx.go:372] «Выключение очередей контроллера»
E0327 19:54:26.690778 8 store.go:178] истекло время ожидания синхронизации кэшей
I0327 19:54:26.690835 8 nginx.go:296] «Запуск процесса NGINX»
I0327 19:54:26.691321 8 queue.go:78] "очередь была отключена, не удалось поставить в очередь" key="&ObjectMeta{Name:initial-sync,GenerateName:,Namespace:,SelfLink:,UID:,ResourceVersion:,Generation :0,CreationTimestamp:0001-01-01 00:00:00 +0000 UTC,DeletionTimestamp:<nil>,DeletionGracePeriodSeconds:nil,Labels:map[string]string{},Annotations:map[string]string{},OwnerReferences :[]OwnerReference{},Finalizers:[],ClusterName:,ManagedFields:[]ManagedFieldsEntry{},}"
I0327 19:54:26.691353 8 Leaderelection.go:243] попытка получить аренду лидера ingress-nginx/ingress-controller-leader-nginx...
I0327 19:54:26.718477 8 status.go:84] «Избран новый лидер» identity="ingress-nginx-controller-72b9j"
I0327 19:54:26.733451 8 nginx.go:388] «Остановка процесса NGINX»
27.03.2022 19:54:26 [уведомление] 28#28: сигнальный процесс запущен
I0327 19:54:27.738884 8 nginx.go:401] «Процесс NGINX остановлен»
I0327 19:54:27.738926 8 main.go:195] «Выход обработан, ожидание удаления модуля»
I0327 19:54:37.739197 8 main.go:198] Код "Выход"=0

С удовольствием предоставим любую другую информацию, которая будет полезна. Я очень ценю помощь заранее!

РЕДАКТИРОВАТЬ:

Кластер находится на AWS и был создан с помощью следующей команды k0ps.

kops create cluster --node-count 2 --node-size t2.medium --zones ap-southeast-2a,ap-southeast-2c --master-size t2.small --master-zones ap-southeast-2c - -master-count 1 --networking=calico --authorization RBAC -o yaml --dry-run > my-cluster.yaml
флаг br
Как именно настроен ваш кластер K8s — какой дистрибутив, установка на «голое железо» или облачный провайдер?
kirie avatar
флаг be
Мой кластер был создан с использованием k0ps и находится на AWS.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.