#istio
Вопрос:
Я пытаюсь использовать an AuthorizationPolicy
для управления доступом к встроенным информационным панелям в Istio (kiali, prometheus, jaeger и grafana).
При наличии Gateway
VirtualService
и AuthorizationPolicy
в системе istio я не могу использовать matchLabels
ее для применения AuthorizationPolicy
к рабочим нагрузкам , которые я хочу. Независимо от того, какой ярлык я использую, он, похоже, игнорирует его. Но если я перемещу AuthoriztionPolicy
и Deployment
в отдельное пространство имен, все будет в порядке.
Немного упрощенный пример (который не работает), где рабочая нагрузка представляет собой простой контейнер nginx и AuthorizationPolicy
ЗАПРЕЩЕНА только для того, чтобы увидеть, что это имеет эффект.
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: {{ .Chart.Name }}-addons-ingress-gateway
namespace: istio-system
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http-web
protocol: HTTP
tls:
httpsRedirect: true
hosts:
- 'kiali.{{ required "A valid .Values.domainName entry required!" .Values.domainName }}'
- port:
number: 443
name: https-web
protocol: HTTPS
tls:
mode: SIMPLE
credentialName: {{ .Chart.Name }}-addons-tls
hosts:
- 'kiali.{{ required "A valid .Values.domainName entry required!" .Values.domainName }}'
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: kiali-vs
namespace: istio-system
spec:
hosts:
- "kiali.{{ required "A valid .Values.domainName entry required!" .Values.domainName }}"
gateways:
- {{ .Chart.Name }}-addons-ingress-gateway
http:
- route:
- destination:
host: kialitest.istio-system.svc.cluster.local
port:
number: 80
---
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: ext-authz
namespace: istio-system
spec:
action: DENY
rules:
- {}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: kialitest
namespace: istio-system
labels:
app: kialitest
spec:
replicas: 1
template:
metadata:
name: kialitest
labels:
app: kialitest
version: {{ .Chart.Name }}-{{ .Chart.Version }}
spec:
containers:
- name: kialitest
image: nginxdemos/hello
ports:
- containerPort: 80
selector:
matchLabels:
app: kialitest
---
apiVersion: v1
kind: Service
metadata:
name: kialitest
namespace: istio-system
spec:
ports:
- name: http
port: 80
selector:
app: kialitest
Если вместо этого я создам новое пространство имен и перемещусь AuthorizationPolicy
, Deployment
а Service
там и обновлю VirtualService
пункт назначения, все будет работать, как ожидается. Ведет ли пространство имен istio-system себя по-другому?
Кубернетес 1.20.7 и Истио 1.11.3
Комментарии:
1. Я не думаю, что
istio-system
пространство имен ведет себя по-другому. Возможно, однако, что существуют и другие объекты, которые влияют на его поведение.2. После более детального расследования сегодня я обнаружил, что упустил из виду, что
istio-system
в нем нет набора этикеток для инъекций istio. Так что ни киали, ни моему тесту не сделали инъекции энвайронмента. Есть ли какая-либо причина, по которой я не должен включать istio-инъекциюistio-system
? Я всегда мог бы создать отдельное пространство имен для встроенных панелей мониторинга, но тогда мне пришлось бы настраивать файлы yaml по умолчанию, предоставляемые Istio, и это увеличивало бы объем работы при каждом обновлении.3. Я также понял, что встроенные информационные панели
sidecar.istio.io/inject: "false"
заставляют меня чувствовать, что я делаю что-то не так.