Метки соответствия для политики авторизации, не применяющейся в пространстве имен istio-system

#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" заставляют меня чувствовать, что я делаю что-то не так.