GlobalConfiguration#
Ресурс GlobalConfiguration позволяет вам определить глобальные параметры конфигурации ANIC. Он реализован как пользовательский ресурс.
Ресурс поддерживает настройку прослушивателей для балансировки нагрузки TCP и
UDP. Прослушиватели требуются ресурсам TransportServer. При установке ANIC с манифестами
необходимо указать ссылку на ресурс GlobalConfiguration в аргументе командной
строки -global-configuration.
Для ANIC требуется только один ресурс GlobalConfiguration. Ресурс GlobalConfiguration определяет глобальные параметры конфигурации
ANIC. Ниже приведен пример: Поле Описание Тип Обязательно Список прослушивателей. Нет Прослушиватель определяет комбинацию протокола и порта, которые Angie будет
использовать при приеме трафика для TransportServer: Поле Описание Тип Обязательно Имя прослушивателя. Это должна быть допустимая метка DNS, как определено в RFC 1035. Например, допустимы значения Да Порт прослушивателя. Порт должен находиться в диапазоне Да Протокол прослушивателя. Поддерживаемые значения: Да Вы можете использовать обычные команды Например, следующая команда создает ресурс GlobalConfiguration,
определенный в Предполагая, что пространство имен ресурса называется В kubectl get и подобных командах также можно использовать короткое имя
Для ресурса GlobalConfiguration доступны два типа валидации: Структурная валидация с помощью Всесторонняя валидация с помощью ANIC. Пользовательское определение ресурса для GlobalConfiguration включает
структурную схему OpenAPI, которая описывает тип каждого поля ресурса. Если вы попытаетесь создать (или обновить) ресурс с нарушением
структурной схемы (например, используете строковое значение для поля
порта прослушивателя), Пример проверки Пример проверки сервера API Kubernetes: Если ресурс не отклонен (то есть не нарушает структурную схему), ANIC
проверит его дополнительно. ANIC проверяет поля ресурса GlobalConfiguration. Если
ресурс недопустим, ANIC не будет его использовать.
Рассмотрим следующие два случая: Если при запуске пода ANIC ресурс GlobalConfiguration
недопустим, ANIC не сможет запуститься и завершит
работу с ошибкой. Если ресурс GlobalConfiguration становится недействительным, когда
ANIC запущен, то ANIC проигнорирует новую
версию. Он сообщит об ошибке и продолжит использовать предыдущую
версию. Когда ресурс снова станет действительным, ANIC
начнет его использовать. Примечание Если ресурс GlobalConfiguration был удален во время
работы ANIC, тот продолжит использовать предыдущую версию ресурса. Вы можете проверить, успешно ли ANIC применил конфигурацию
для GlobalConfiguration. Для нашего ресурса GlobalConfiguration
Обратите внимание, что раздел "События" (Events) включает событие Normal с
причиной Updated, которое информирует нас о том, что конфигурация была успешно
применена. Если вы создадите недопустимый ресурс, ANIC отклонит его и выдаст событие
Rejected. Например, если вы создадите ресурс GlobalConfiguration
angie-configuration с несколькими прослушивателями, для которых задан один и
тот же протокол UDP и порт 53, вы получите:Предварительные требования#
Спецификация GlobalConfiguration#
apiVersion: k8s.angie.software/v1alpha1
kind: GlobalConfiguration
metadata:
name: angie-configuration
namespace: angie-ingress
spec:
listeners:
- name: dns-udp
port: 5353
protocol: UDP
- name: dns-tcp
port: 5353
protocol: TCP
listeners
Прослушиватель#
name: dns-tcp
port: 5353
protocol: TCP
name
hello
и listener-123
. Имя должно быть уникальным среди всех прослушивателей. Имя tls-passthrough
зарезервировано для встроенного прослушивателя TLS Passthrough и не может быть использовано.string
port
1..65535
со следующими исключениями: 80
, 443
, порт [статуса](/angie-ingress-controller/logging-and-monitoring/status-page). Комбинация порта и протокола должна быть уникальна среди всех прослушивателей.int
protocol
TCP
и UDP
.string
Использование GlobalConfiguration#
kubectl
для работы с ресурсом
GlobalConfiguration.global-configuration.yaml
с именем
angie-configuration
:$ kubectl apply -f global-configuration.yaml
globalconfiguration.k8s.angie.software/angie-configuration created
angie-ingress
,
вы можете получить ресурс, запустив:$ kubectl get globalconfiguration angie-configuration -n angie-ingress
NAME AGE
angie-configuration 13s
gc
вместо globalconfiguration
.Валидация#
kubectl
и сервера Kubernetes
API.Структурная валидация#
kubectl
и сервер Kubernetes API отклонят
такой ресурс:kubectl
:$ kubectl apply -f global-configuration.yaml
error: error validating "global-configuration.yaml": error validating
data: ValidationError(GlobalConfiguration.spec.listeners[0].port):
invalid type for
software.angie.k8s.v1alpha1.GlobalConfiguration.spec.listeners.port:
got "string", expected "integer"; if you choose to ignore these
errors, turn validation off with --validate=false
$ kubectl apply -f global-configuration.yaml --validate=false
The GlobalConfiguration "angie-configuration" is invalid: []: Invalid
value: map[string]interface {}{ ... }: validation failure list:
spec.listeners.port in body must be of type integer: "string"
Всесторонняя валидация#
angie-configuration
мы можем запустить:$ kubectl describe gc angie-configuration -n angie-ingress
. . .
Events:
Type Reason Age From Message
Normal Updated 11s angie-ingress-controller GlobalConfiguration
angie-ingress/angie-configuration was updated
$ kubectl describe gc angie-configuration -n angie-ingress
. . .
Events:
Type Reason Age From Message
Normal Updated 55s angie-ingress-controller GlobalConfiguration
angie-ingress/angie-configuration was updated
Warning Rejected 6s angie-ingress-controller GlobalConfiguration
angie-ingress/angie-configuration is invalid and was rejected:
spec.listeners: Duplicate value: "Duplicated port/protocol combination
53/UDP"
Обратите внимание, что раздел "События" (Events) включает предупреждающее
событие с указанием причины отклонения.