Policy#
Ресурс Policy позволяет настраивать такие функции, как контроль доступа и ограничение скорости; их можно добавить к вашим ресурсам VirtualServer и VirtualServerRoute.
Он реализован как пользовательский ресурс.
Это справочная документация по ресурсу Policy. Политики работают совместно с ресурсами VirtualServer и VirtualServerRoute,
которые необходимо создавать отдельно. Ниже приведен пример политики, которая разрешает доступ клиентам из
подсети Поле Описание Тип Обязательно Политика контроля доступа, основанная на IP-адресе клиента. Нет Указывает, какой экземпляр ANIC должен обрабатывать ресурс Policy. Нет Политика ограничения скорости управляет скоростью обработки запросов по определенному ключу. Нет Политика базовой аутентификации настраивает в Angie аутентификацию клиентских запросов с использованием базовой аутентификации HTTP по учетным данным. Нет Политика IngressMTLS настраивает проверку сертификата клиента. Нет Политика EgressMTLS настраивает аутентификацию и проверку сертификата апстрима. Нет Политика OIDC настраивает аутентификацию через провайдера OIDC. Нет Политика JWT настраивает Angie для аутентификации запросов клиентов с использованием JSON Web Tokens. Нет Примечание Политика должна включать в себя ровно одно значение. Политика контроля доступа настраивает в Angie отклонение или принятие
запросов от клиентов с указанными IP-адресами и подсетями. Например, следующая политика разрешает доступ клиентам из подсети
Напротив, приведенная ниже политика делает обратное: запрещает доступ
клиентам с Примечание Функция реализована с использованием модуля Angie http_access. Политика контроля доступа ANIC поддерживает либо
разрешающие, либо запрещающие правила, но не оба вида сразу (в отличие от
модуля). Поле Описание Тип Обязательно Разрешает доступ для указанных сетей или адресов.
Например, Нет Запрещает доступ для указанных сетей или адресов.
Например, Нет AccessControl должен включать либо Ресурс VirtualServer или VirtualServerRoute может ссылаться на несколько
политик контроля доступа. Например, здесь мы ссылаемся на две политики,
в каждой из которых настроен список разрешений: Когда вы ссылаетесь на несколько политик контроля доступа, ANIC
объединит их содержимое в один список разрешений или запретов. Ссылки как на разрешающие, так и на запрещающие политики, как показано в
примере ниже, не поддерживаются. Если указаны ссылки как на разрешающие,
так и на запрещающие списки, ANIC использует только
политики разрешающих списков. Политика ограничения скорости настраивает в Angie ограничение скорости
обработки запросов. Например, следующая политика ограничит все последующие запросы,
поступающие с одного IP-адреса, при превышении скорости в 10 запросов в
секунду: Примечание Функция реализована с использованием модуля Angie
Limit Req. Поле Описание Тип Обязательно Допустимая скорость запросов. Скорость указывается в запросах в секунду (r/s) или запросах в минуту (r/m). Да Ключ, к которому применяется ограничение скорости. Может содержать текст, переменные или их комбинацию. Переменные должны заключены в Да Размер зоны разделяемой памяти. Допускаются только положительные значения. Допустимые суффиксы - Да Указывает предел, при достижении которого избыточные запросы становятся отложенными. Если этот параметр не задан, задерживаются все избыточные запросы. Нет Отключает задержку избыточных запросов при ограничении количества запросов. Имеет приоритет над Нет Избыточные запросы задерживаются до тех пор, пока их количество не превысит размер Нет Включает режим сухого прогона. В этом режиме ограничение скорости фактически не применяется, но количество избыточных запросов учитывается, как обычно, в зоне разделяемой памяти. Нет Устанавливает желаемый уровень ведения журнала для случаев, когда сервер отказывается обрабатывать запросы из-за превышения скорости или задерживает обработку запросов. Допустимые значения: Нет Задает код состояния, возвращаемый в ответ на отклоненные запросы. Значение должно попадать в диапазон Нет Для каждой политики, на которую ссылается VirtualServer или его
VirtualServerRoute, ANIC сгенерирует единую зону ограничения
скорости, определенную директивой limit_req_zone. Если два
ресурса VirtualServer ссылаются на одну и ту же политику, ANIC
сгенерирует две разные зоны ограничения скорости, по одной на каждый
VirtualServer. Ресурс VirtualServer или VirtualServerRoute может ссылаться на несколько
политик ограничения скорости. Например, здесь мы ссылаемся на две
политики: Когда вы ссылаетесь на несколько политик ограничения скорости, ANIC
настроит в Angie использование всех указанных ограничений
скорости. Если определено несколько политик, каждая дополнительная
политика наследует параметры Настраивает в Angie аутентификацию клиентских запросов при помощи базовой
схемы аутентификации HTTP. Например, следующая политика будет отклонять все запросы, которые не
содержат действительную комбинацию имени пользователя и пароля в
заголовке HTTP Примечание Функция реализована с использованием модуля Angie Auth Basic. Поле Описание Тип Обязательно Имя секрета Kubernetes, в котором хранится конфигурация Htpasswd. Он должен находиться в том же пространстве имен, что и ресурс Policy. Секрет должен иметь тип Да Область для базовой аутентификации. Нет Ресурс VirtualServer или VirtualServerRoute может ссылаться на несколько
политик базовой аутентификации. При этом будет применяться только одна
из них. Все последующие ссылки будут проигнорированы. Например, здесь мы
ссылаемся на две политики: В этом примере ANIC будет использовать конфигурацию из
первой ссылки на политику "basic-auth-policy-one" и игнорирует
"basic-auth-policy-two". Политика IngressMTLS настраивает проверку сертификата клиента. Например, следующая политика будет проверять сертификат клиента,
используя сертификат Центра Сертификации, указанный в Ниже приведен пример У ресурса VirtualServer, который ссылается на политику IngressMTLS,
должно быть следующие настройки: включена терминация TLS. ссылка на политику в
спецификации VirtualServer.
Не разрешается ссылаться на политику IngressMTLS в
маршруте
или
вложенном маршруте
VirtualServerRoute. Если эти условия нарушены, Angie будет отправлять клиентам код состояния
Вы можете передавать сведения о сертификате клиента, включая сам
сертификат, серверам апстрима. Например: Мы используем параметр Примечание Функция реализована с использованием модуля Angie SSL. Политика IngressMTLS поддерживает настройку списка CRL для политики. Это
можно сделать одним из двух способов. Примечание Одновременно можно использовать только один из этих параметров конфигурации. Добавление в тип секрета Добавление поля Примечание Этот параметр конфигурации следует использовать только при наличии
CRL-файла размером более 1 МБ; в противном случае рекомендуется
использовать для управления CRL тип секрета Пример YAML: Предупреждение При настройке CRL с помощью поля ANIC ожидает, что CRL, в данном случае При обновлении содержимого списка CRL (например, был отозван новый
сертификат) Angie необходимо перезагрузить, чтобы отразились
последние изменения. В зависимости от вашей среды для этого может
потребоваться обновить имя списка CRL и применить это обновление к
политике Обратитесь к документации Kubernetes по
томам, чтобы
найти наилучшую реализацию для вашей среды. Поле Описание Тип Обязательно Имя секрета Kubernetes, в котором хранится сертификат центра сертификации. Он должен находиться в том же пространстве имен, что и ресурс Policy. Секрет должен иметь тип Да Верификация для клиента. Допустимые значения: Нет Устанавливает глубину проверки в цепочке клиентских сертификатов. Значение по умолчанию равно Нет Имя файла списка отзыва сертификатов. ANIC будет искать этот файл в каталоге /etc/angie/secrets Нет Ресурс VirtualServer может ссылаться только на одну политику
IngressMTLS. Все последующие ссылки будут проигнорированы. Например,
здесь мы ссылаемся на две политики: В этом примере ANIC будет использовать конфигурацию из
первой ссылки на политику EgressMTLS настраивает аутентификацию и проверку сертификатов для
апстримов. Например, следующая политика будет использовать Примечание Функция реализована с использованием модуля Angie Proxy. Поле Описание Тип Обязательно Имя секрета файла Kubernetes, в котором хранятся сертификат и ключ TLS. Он должен находиться в том же пространстве имен, что и ресурс Policy. Секрет должен иметь тип Нет Имя секрета Kubernetes, в котором хранится сертификат центра сертификации. Он должен находиться в том же пространстве имен, что и ресурс Policy. Секрет должен иметь тип Нет Включает проверку сертификата HTTPS-сервера апстрима. Нет Устанавливает глубину проверки в цепочке сертификатов проксируемого HTTPS-сервера. Значение по умолчанию равно Нет Позволяет повторно использовать SSL-сеансы к апстримам. Значение по умолчанию равно Нет Позволяет передавать имя сервера через расширение Нет Позволяет переопределить имя сервера, используемое для проверки сертификата HTTPS-сервера апстрима. Нет Указывает разрешенные шифры для запросов к HTTPS-серверу апстрима. Значение по умолчанию - Нет Задает протоколы для запросов к HTTPS-серверу апстрима. Значение по умолчанию - Нет Ресурс VirtualServer или VirtualServerRoute может ссылаться на несколько
политик EgressMTLS. При этом будет применяться только одна из них. Все
последующие ссылки будут проигнорированы. Например, здесь мы ссылаемся
на две политики: В этом примере ANIC будет использовать конфигурацию из
первой ссылки на политику OIDC (OpenID Connect) обеспечивает удобную аутентификацию пользователей через внешнего провайдера, используя безопасные токены для управления доступом в системе. Примечание Эта функция отключена по умолчанию. Чтобы ее включить, задайте аргумент командной строки Политика OIDC настраивает ANIC как клиент (relying party) для аутентификации через OpenID Connect: Например, следующая конфигурация использует clientID Обязательные условия: В спецификации VirtualServer задайте обязательные
переменные Добавьте секрет с ключом клиента. Ключ должен быть закодирован в Base64: Пошаговые инструкции по настройке см. в статье Настройка OIDC. Поле Описание Тип Обязательно Идентификатор клиента, предоставленный провайдером OIDC. Идентифицирует приложение,
которое обращается за авторизацией. да Имя секрета, где хранится ключ клиента. Должен находиться в том же пространстве имен, что и Policy. да URL конечной точки авторизации, предоставленной провайдером OIDC. Это адрес, по которому
будут отправляться запросы для аутентификации пользователя. да URI, по которому провайдер OIDC предоставляет сертификаты (JSON Web Key Set)
для проверки выданных сервером JWT-токенов (JSON Web Token). да URL для получения токенов аутентификации и обновления от провайдера OIDC. да Список OIDC-областей, которые нужно запросить у провайдера. Значение по умолчанию - да Включает использование Bearer-токена для авторизации доступа к защищенным ресурсам на проксируемом сервере. нет Примечание В ресурсах VirtualServer можно использовать только одну политику OIDC, причем ее можно применять к разным маршрутам VirtualServer. Например, если в конфигурации есть несколько маршрутов для обработки запросов, все они могут использовать одну и ту же политику OIDC для аутентификации пользователей. Ресурс VirtualServer может ссылаться на несколько
политик OIDC. При этом будет применяться только одна из них. Все
последующие ссылки будут проигнорированы. Например, здесь мы ссылаемся
на две политики: В этом примере ANIC будет использовать конфигурацию из
первой ссылки на политику Политика JWT настраивает в Angie аутентификацию запросов клиентов с использованием JSON Web Tokens. Примечание Эта функция отключена по умолчанию. Чтобы ее включить, задайте аргумент командной строки Следующая политика будет отклонять все запросы, которые не содержат действительный JWT в токене заголовка HTTP: Обязательные условия: Добавьте секрет с ключом клиента. Ключ должен быть закодирован в Base64: Поле Описание Тип Обязательно Область, которую клиент увидит при запросе аутентификации, например, строка, описывающая защищенный ресурс. да Имя секрета Kubernetes, который хранит JSON Web Key (JWK), используемый для проверки подписей токенов JWT. Angie будет использовать ключи из этого секрета для валидации подписей JWT и проверки их подлинности. Секрет должен находиться в том же пространстве имен, что и Policy. да Указывает, откуда нужно извлечь JWT. Например, переменная нет Ресурс VirtualServer может ссылаться на несколько
политик JWT. При этом будет применяться только одна из них. Все
последующие ссылки будут проигнорированы. Например, здесь мы ссылаемся
на две политики: В этом примере ANIC будет использовать конфигурацию из
первой ссылки на политику Политики можно применять как к ресурсам VirtualServer, так и к
VirtualServerRoute. Например: В случае VirtualServer политику можно применить: для всех маршрутов (политики спецификации) к определенному маршруту (политики маршрутов) Политики маршрутов имеют приоритет над политиками спецификации того
же типа. Если в примере выше тип политик Переопределение обеспечивается Angie: политики спецификации
реализуются в контексте конфигурации Ресурс VirtualServerRoute, на который ссылается указанный выше
VirtualServer: В VirtualServerRoute можно применить политику к вложенному маршруту
(политики вложенных маршрутов). Политики вложенных маршрутов имеют приоритет над политиками
спецификации того же типа. В приведенном выше примере, если тип
политик Политики вложенных маршрутов всегда имеют приоритет над политиками
маршрутов независимо от типа. Например, политика Angie будет рассматривать политику как недействительную, если
выполняется одно из следующих условий: Политика не проходит всестороннюю валидацию. Политика отсутствует в кластере. Политика не соответствует требованиям, предъявляемым к ее конкретному
типу. Например, В случае недопустимой политики Angie возвращает код состояния 500 для
клиентских запросов со следующими правилами: Если на политику ссылается Если ссылка на политику задана в Если политика недействительна, VirtualServer или VirtualServerRoute будет иметь
статус с предупреждением о состоянии и сообщением, объясняющим, почему
политика не была признана недействительной. Для ресурса Policy доступны два типа валидации: Структурная валидация с помощью Всесторонняя валидация с помощью ANIC. Пользовательское определение ресурса для Policy включает структурную схему
OpenAPI, которая описывает тип каждого поля ресурса. Если вы попытаетесь создать (или обновить) ресурс, который нарушает структурную
схему (например, использует строковое значение вместо массива строк в поле
Пример проверки Пример проверки сервера Kubernetes API: Если ресурс прошел структурную валидацию, выполняется всесторонняя валидация
ANIC. ANIC проверяет поля ресурса Policy. Если ресурс недопустим,
ANIC отклонит его. Ресурс останется в кластере, но ANIC
будет игнорировать его. Можно использовать Обратите внимание, что раздел "События" (Events) включает событие Normal с
причиной AddedOrUpdated, которое информирует нас о том, что конфигурация была
успешно применена. Если вы создадите недопустимый ресурс, ANIC отклонит его и выдаст
событие Rejected. Например, если вы создадите политику Обратите внимание, что раздел "События" (Events) включает предупреждающее
событие с указанием причины отклонения. Кроме того, эта информация также доступна в поле Примечание Если вы сделаете существующий ресурс недействительным,
ANIC отклонит его.Предварительные требования#
Спецификация Policy#
10.0.0.0/8
и запрещает доступ любым другим:apiVersion: k8s.angie.software/v1
kind: Policy
metadata:
name: allow-localhost
spec:
accessControl:
allow:
- 10.0.0.0/8
AccessControl
ingressClassName
string
rateLimit
basicAuth
ingressMTLS
egressMTLS
OIDC
JWT
AccessControl#
10.0.0.0/8
и запрещает доступ любым другим:accessControl:
allow:
- 10.0.0.0/8
10.0.0.0/8
и разрешает доступ любым другим клиентам:accessControl:
deny:
- 10.0.0.0/8
allow
192.168.1.1
или 10.1.1.0/16
.string[ ]
deny
192.168.1.1
или 10.1.1.0/16
.string[ ]
allow
, либо deny
.Поведение слияния AccessControl#
policies:
- name: allow-policy-one
- name: allow-policy-two
policies:
- name: deny-policy
- name: allow-policy-one
- name: allow-policy-two
RateLimit#
rateLimit:
rate: 10r/s
zoneSize: 10M
key: ${binary_remote_addr}
rate
string
key
${}
. Например: $binary_remote_addr
. Допустимые переменные: $binary_remote_addr
, $request_uri
, $url
, $http_
, $args
, $arg_
, $cookie_
.string
zoneSize
k
или m
; если суффикс не задан, предполагается k
.string
delay
int
noDelay
delay
, если заданы оба параметра.bool
burst
burst
, после чего запрос завершается с ошибкой.int
dryRun
bool
logLevel
info
, notice
, warn
или error
. Значение по умолчанию - error
.string
rejectCode
400..599
. Значение по умолчанию - 503
.int
Поведение слияния RateLimit#
policies:
- name: rate-limit-policy-one
- name: rate-limit-policy-two
dryRun
, LogLevel
и rejectCode
из первой политики, на которую идет ссылка (rate-limit-policy-one
в
примере выше).BasicAuth#
Authentication
basicAuth:
secret: htpasswd-secret
realm: "My API"
secret
angie.software/htpasswd
, а конфигурация должна храниться в секрете по ключу htpasswd
; в противном случае секрет будет отклонен как недействительный.string
realm
string
Поведение слияния BasicAuth#
policies:
- name: basic-auth-policy-one
- name: basic-auth-policy-two
IngressMTLS#
ingress-mtls-secret
:ingressMTLS:
clientCertSecret: ingress-mtls-secret
verifyClient: "on"
verifyDepth: 1
ingress-mtls-secret
типа angie.software/ca
kind: Secret
metadata:
name: ingress-mtls-secret
apiVersion: v1
type: angie.software/ca
data:
ca.crt: <base64encoded-certificate>
500
.action:
proxy:
upstream: webapp
requestHeaders:
set:
- name: client-cert-subj-dn
value: ${ssl_client_s_dn} # subject DN
- name: client-cert
value: ${ssl_client_escaped_cert} # клиентский сертификат в формате PEM (urlencoded)
requestHeaders
в Action.Proxy
для задания значений двух заголовков, которые Angie будет передавать серверам
апстрима. См. список встроенных переменных, поддерживаемых модулем
SSL, которые вы можете использовать для передачи сведений о
сертификате клиента.Использование списка отзыва сертификатов#
angie.software/ca
поля ca.crl
,
которое содержит список отзыва сертификатов в кодировке base64.
Пример YAML:kind: Secret
metadata:
name: ingress-mtls-secret
apiVersion: v1
type: angie.software/ca
data:
ca.crt: <base64encoded-certificate>
ca.crl: <base64encoded-crl>
crlFileName
с именем CRL-файла в спецификацию
политики IngressMTLS.angie.software/ca
.apiVersion: k8s.angie.software/v1
kind: Policy
metadata:
name: ingress-mtls-policy
spec:
ingressMTLS:
clientCertSecret: ingress-mtls-secret
crlFileName: webapp.crl
verifyClient: "on"
verifyDepth: 1
ingressMTLS.crlFileName
следует
учитывать дополнительный контекст:webapp.crl
,
будет находиться в каталоге /etc/angie/secrets
. Для развертывания
ANIC необходимо будет добавить точку подключения тома.
Добавьте свой CRL в каталог /etc/angie/secrets
.ingress-mtls.yaml
, чтобы Angie получил последнюю версию
CRL.clientCertSecret
angie.software/ca
, а конфигурация должна храниться в секрете по ключу ca.crt
; в противном случае секрет будет отклонен как недействительный.string
verifyClient
"on"
, "off"
, "optional"
, "optional_no_ca"
. Значение по умолчанию - "on"
.string
verifyDepth
1
.int
crlFileName
string
Поведение слияния IngressMTLS#
policies:
- name: ingress-mtls-policy-one
- name: ingress-mtls-policy-two
ingress-mtls-policy-one
и игнорирует
ingress-mtls-policy-two
.EgressMTLS#
egress-mtls-secret
для аутентификации в приложении апстрима и egress-trusted-ca-secret
для проверки сертификата приложения:egressMTLS:
tlsSecret: egress-mtls-secret
trustedCertSecret: egress-trusted-ca-secret
verifyServer: on
verifyDepth: 2
tlsSecret
kubernetes.io/tls
, сертификат - храниться в секрете под ключом tls.crt
, а ключ - как tls.key
; в противном случае секрет будет отклонен как недействительный.string
trustedCertSecret
angie.software/ca
, а конфигурация должна храниться в секрете по ключу ca.crt
; в противном случае секрет будет отклонен как недействительный.string
verifyServer
bool
verifyDepth
1
.int
sessionReuse
true
.bool
serverName
SNI
.bool
sslName
string
ciphers
DEFAULT
.string
protocols
TLSv1, TLSv1.1, TLSv1.2
.string
Поведение слияния EgressMTLS#
policies:
- name: egress-mtls-policy-one
- name: egress-mtls-policy-two
egress-mtls-policy-one
и игнорирует
egress-mtls-policy-two
.OIDC#
enable-oidc=true
.policies:
- name: oidc-policy
myclient
и clientSecret oidc-secret
для аутентификации через провайдера OpenID Connect https://idp.example.com
:oidc:
clientID: myclient
clientSecret: oidc-secret
authEndpoint: https://idp.example.com/openid-connect/auth
jwksURI: https://idp.example.com/openid-connect/certs
tokenEndpoint: https://idp.example.com/openid-connect/token
scope: openid+profile+email
accessTokenEnable: true
$jwt_claim_iat
, $jwt_claim_iss
, $jwt_claim_sub
, $jwt_claim_aud
в maps. Переменные обеспечивают валидацию токенов в процессе аутентификации OIDC.apiVersion: v1
kind: Secret
metadata:
name: oidc-secret
type: angie.software/oidc
data:
client-secret: <client_secret>
clientID
string
clientSecret
string
authEndpoint
string
jwksURI
string
tokenEndpoint
string
scope
openid
. Это значение является обязательным. Вы также можете добавлять другие области, используя знак +, например: openid+profile+email
.string
accessTokenEnable
bool
Поведение слияния OIDC#
policies:
- name: oidc-policy-one
- name: oidc-policy-two
oidc-policy-one
и игнорирует oidc-policy-two
.JWT#
policies:
- name: jwt-policy
-enable-jwt=true
.jwt:
realm: MyProductAPI
secret: jwk-secret
token: $http_token
apiVersion: v1
kind: Secret
metadata:
name: jwk-secret
type: angie.software/jwk
data:
jwk: <client_secret>
realm
string
secret
string
token
$http_token
ссылается на значение заголовка HTTP token
, который будет передан клиентом.string
Поведение слияния JWT#
policies:
- name: jwt-policy-one
- name: jwt-policy-two
jwt-policy-one
и игнорирует jwt-policy-two
.Применение политик#
- VirtualServer:
apiVersion: k8s.angie.software/v1
kind: VirtualServer
metadata:
name: cafe
namespace: cafe
spec:
host: cafe.example.com
tls:
secret: cafe-secret
policies: # spec policies
- name: policy1
upstreams:
- name: coffee
service: coffee-svc
port: 80
routes:
- path: /tea
policies: # route policies
- name: policy2
namespace: cafe
route: tea/tea
- path: /coffee
policies: # route policies
- name: policy3
namespace: cafe
action:
pass: coffee
policy-1
и policy-3
- AccessControl
, то для запросов к cafe.example.com/coffee
Angie применит policy-3
.server
, а политики маршрутов
реализуются в контексте location
. В результате приоритет в рамках
одного типа имеют политики маршрутов.apiVersion: k8s.angie.software/v1
kind: VirtualServerRoute
metadata:
name: tea
namespace: tea
spec:
host: cafe.example.com
upstreams:
- name: tea
service: tea-svc
port: 80
subroutes: # subroute policies
- path: /tea
policies:
- name: policy4
namespace: tea
action:
pass: tea
policy-1
(в VirtualServer) и policy-4
-
AccessControl
, то для запросов к cafe.example.com/tea
Angie
будет применять policy-4
. Как и в случае с VirtualServer,
переопределение обеспечивается средствами Angie.policy-2
в
маршруте VirtualServer будет проигнорирована на вложенном маршруте
/tea
, поскольку у того есть свои собственные политики (в нашем
случае это только policy4
). Если бы у вложенного маршрута не было
политик, то была бы применена policy-2
. Это переопределение
выполняет ANIC - контекст location
для вложенного
маршрута будет содержать либо политики маршрута, либо политики
вложенного маршрута, но не то и другое вместе.Недопустимые политики#
политика ingressMTLS
требует, чтобы в
VirtualServer была включена терминация TLS.маршрут
VirtualServer или
вложенный маршрут
VirtualServerRoute, Angie будет возвращать код
состояния 500 для запросов к URI такого маршрута.спецификации
VirtualServer,
Angie будет возвращать код состояния 500 для запросов ко всем URI
этого VirtualServer.Валидация#
kubectl
и сервера Kubernetes API.Структурная валидация#
allow
), то kubectl
и сервер Kubernetes API отклонят ресурс.kubectl
:kubectl apply -f access-control-policy-allow.yaml
error: error validating "access-control-policy-allow.yaml": error validating data: ValidationError(Policy.spec.accessControl.allow): invalid type for software.angie.k8s.v1.Policy.spec.accessControl.allow: got "string", expected "array"; if you choose to ignore these errors, turn validation off with --validate=false
kubectl apply -f access-control-policy-allow.yaml --validate=false
The Policy "webapp-policy" is invalid: spec.accessControl.allow: Invalid value: "string": spec.accessControl.allow in body must be of type array: "string"
Всесторонняя валидация#
kubectl
, чтобы проверить, успешно ли ANIC
применил конфигурацию Policy. Для политики mypolicy
мы можем запустить:kubectl describe pol mypolicy
. . .
Events:
Type Reason Age From Message
-----
Normal AddedOrUpdated 11s angie-ingress-controller Policy default/mypolicy was added or updated
mypolicy
с
недопустимым IP-адресом 10.0.0.
в поле allow
, то вы получите:kubectl describe policy mypolicy
. . .
Events:
Type Reason Age From Message
-----
Warning Rejected 7s angie-ingress-controller Policy default/mypolicy is invalid and was rejected: spec.accessControl.allow[0]: Invalid value: "10.0.0.": must be a CIDR or IP
status
ресурса Policy.
Обратите внимание на раздел "Статус" (Status) политики:kubectl describe pol mypolicy
. . .
Status:
Message: Policy default/mypolicy is invalid and was rejected: spec.accessControl.allow[0]: Invalid value: "10.0.0.": must be a CIDR or IP
Reason: Rejected
State: Invalid