У меня много проблем, которые, кажется, связаны с обновлением моего кластера 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