Элементы списка Istio K8sObjectOverlay.PathValue не работают - PullRequest
3 голосов
/ 20 июня 2020

У меня был существующий экземпляр IstioOperator , установленный из Istio v1.5:

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
  namespace: istio-system
  name: istio
spec:
  profile: default
  components:
    ingressGateways:
      - namespace: istio-system
        name: istio-ingressgateway
        enabled: true
        k8s:
          serviceAnnotations:
            "cloud.google.com/load-balancer-type": "Internal"
            "service.beta.kubernetes.io/aws-load-balancer-internal": "0.0.0.0/0"
            "service.beta.kubernetes.io/azure-load-balancer-internal": "true"
            "external-dns.alpha.kubernetes.io/hostname": "*.SedTarget"
  addonComponents:
    kiali:
      enabled: true
    prometheus:
      enabled: false

Это сработало нормально.

Я добавил следующий раздел в k8s раздел (под spec.components.ingressGateways[0].k8s):

          overlays:
          - apiVersion: v1
            kind: Service
            name: istio-ingressgateway
            patches:
            - path: spec.ports.[name:kafka]
              value:
                name: kafka
                protocol: TCP
                port: 9092
                targetPort: 9092

Чтобы я мог добавить kafka в список портов.

Это не сработало, хотя документы show Я должен иметь возможность указать что-то вроде [name:kafka], чтобы добавить элемент в список :

K8sObjectOverlay.PathValue

Поле - Путь к форме a.[key1:value1].b.[:value2] Где [key1:value1] - это селектор для пары «ключ-значение», чтобы идентифицировать элемент списка, а [:value] - селектор значения, чтобы идентифицировать элемент списка в листовом списке. Все промежуточные узлы пути должны существовать.

Я считаю, что это не из-за опечатки, потому что я я могу заменить существующий элемент в списке на kafka патч, указав путь вроде spec.ports[1]. Я не могу указать существующий порт, чтобы перезаписать его любой парой [key:value], а spec.ports[-] не подходит для добавления в конец списка.

Это не соответствует моим ожиданиям. Есть у кого-нибудь идеи, где я ошибаюсь?

Заранее спасибо!

1 Ответ

3 голосов
/ 20 июня 2020

Я потратил некоторое время на изучение этого и заставил службу tls работать.

Во-первых, похоже, что вам не хватает | в переопределении YAML.

          overlays:
          - apiVersion: v1
            kind: Service
            name: istio-ingressgateway
            patches:
            - path: spec.ports.[name:kafka]
              value: |  <== here
                name: kafka
                protocol: TCP
                port: 9092
                targetPort: 9092

Дополнительную информацию можно получить, просмотрев журналы операторов. Например:

$ kubectl -n istio-operator logs istio-operator-5998f6c744-kg2v6

, и вы должны увидеть что-то вроде этого:

2020-06-20T06:20:28.200545Z info    installer   Applying Kubernetes overlay:
- kind: Service
  name: istio-ingressgateway
  patches:
  - path: spec.ports.[name:kafka]
    value: |
      name: kafka
      port: 9092
      protocol: TCP
      targetPort: 9092

Однако, похоже, это не отменяет порт, и я получаю (даже если я вручную добавлю kafka на службу istio-ingressgateway K8s):

2020-06-20T06:37:01.388907Z error   reconciling err: path spec.ports.[name:kafka]: element [name:kafka] not found

Он действительно работает с чем-то существующим, например spec.ports.[name:tls].

Теперь я не совсем уверен, что вы пытаетесь сделать, изменяя службу входящего шлюза. Насколько я понимаю, эти переопределения предназначены для определенных c компонентов Istio, а не для того, как вы «используете» Istio как таковое.

Обычно, чтобы добавить шлюз / службу с Istio, вы должны использовать что-то вроде this с ресурсами Gateway и VirtualService.

...