Istio сложно K8sObjectOverlay.PathValue - PullRequest
1 голос
/ 20 апреля 2020

Istio можно развернуть с помощью IstioOperator .

. Вы можете исправлять все, что создано определенным компонентом, с помощью K8sObjectOverlay , который занимает PathValue . Я не могу понять, как обеспечить сложные значения PathValues.

Вот несколько примеров патчей Я нашел (поищите "patches:" на этих страниц), если это поможет.

Патч, который я пытаюсь применить, изменяет ingressGateway по умолчанию, который создается из:

...
spec:
  profile: default
  components:
    ingressGateways:
      - namespace: istio-system
        name: istio-ingressgateway
        enabled: true

Я могу просмотреть входящий шлюз по умолчанию, который создается с kubectl edit gateway/ingressgateway -n istio-system и посмотрите этот фрагмент:

spec:
  servers:
  - hosts:
    - '*'
    port:
      name: http
      number: 80
      protocol: HTTP

Моя цель изменить его на это:

spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
    - port:
        number: 80
        name: http
        protocol: HTTP
      hosts:
        - "*"
      tls:
        httpsRedirect: true # sends 301 redirect for http requests
    - port:
        number: 443
        name: https-443
        protocol: HTTPS
      hosts:
        - "*"
      tls:
        mode: SIMPLE # enables HTTPS on this port
        serverCertificate: /etc/istio/ingressgateway-certs/tls.crt
        privateKey: /etc/istio/ingressgateway-certs/tls.key

Я считаю, что ObjectOverlay, который я должен добавить в первый блок YAML выше должно начинаться примерно так:

        k8s:
          overlays:
            - apiVersion: networking.istio.io/v1beta1
              Kind: Gateway
              name: ingressgateway
              patches:
                - path: spec.servers.

, но я не знаю, как указать, что я хочу добавить tls.httpsRedirect: true к первому элементу списка, или как создать элемент списка с относительно сложные значения выше.

Документы PathValue , которые я связал выше, мне не понятны. Сам Istio просто ссылается на StackOverflow с тегом [Istio] , поэтому я думаю, что именно сюда я и обращаюсь за помощью.

Ответы [ 2 ]

1 голос
/ 07 мая 2020

Это часть наложения, которая добавит еще одну запись сервера с некоторыми примерами спецификаций. Просто настройте его так, как вы хотите. Вы также можете переопределить свою первую запись на сервере, указав путь spe c .servers [0], а затем установить значение на то, что хотите.

ingressGateways: 
  - enabled: true
    k8s:
      overlays:
      - apiVersion: networking.istio.io/v1alpha3
        kind: Gateway
        name: ingressgateway
        patches:
        - path: spec.servers[1]
          value:
            hosts:
              - '*.example.com'
            port:
              name: https
              number: 443
              protocol: HTTPS
            tls:
              credentialName: example-cert
              mode: SIMPLE
              privateKey: sds
              serverCertificate: sds
1 голос
/ 21 апреля 2020

AFAIK это не возможно, как вы можете прочитать в следующей документации, это больше похоже на включение, отключение некоторых компонентов, памяти, меток.


Если вы хотите редактировать определенные c компоненты, такие как входной шлюз, используйте istioctl manifest generate

Вы можете создать yaml для каждого компонента istio, который будет установлен.

В вашем примере используйте

istioctl manifest generate --set profile=default > my-default.yaml

Используйте vi search чтобы найти входной шлюз, он должен выглядеть следующим образом.

apiVersion: networking.istio.io/v1alpa3
kind: Gateway
metadata:
  name: ingressgateway
  namespace: istio-system
  labels:
    release: istio
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
      - "*"

Измените , используя ваши спецификации

apiVersion: networking.istio.io/v1alpa3
kind: Gateway
metadata:
  name: ingressgateway
  namespace: istio-system
  labels:
    release: istio
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
    - port:
        number: 80
        name: http
        protocol: HTTP
      hosts:
        - "*"
      tls:
        httpsRedirect: true # sends 301 redirect for http requests
    - port:
        number: 443
        name: https-443
        protocol: HTTPS
      hosts:
        - "*"
      tls:
        mode: SIMPLE # enables HTTPS on this port
        serverCertificate: /etc/istio/ingressgateway-certs/tls.crt
        privateKey: /etc/istio/ingressgateway-certs/tls.key

И установите istio с вашим измененным входом- Шлюз с kubectl применить

kubectl apply -f my-default.yaml

Протестировал сам и все работает. Надеюсь, что это ответ на ваш вопрос.

...