【问题标题】:Istio K8sObjectOverlay.PathValue list elements not workingIstio K8sObjectOverlay.PathValue 列表元素不起作用
【发布时间】:2020-06-20 14:49:37
【问题描述】:

我从 Istio v1.5 安装了一个现有的 IstioOperator 实例:

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 添加到端口列表中。

这不起作用,即使the docs show I should be able to specify something like [name:kafka] to add an element to a list:

K8sObjectOverlay.PathValue

Field - a.[key1:value1].b.[:value2] 形式的路径其中[key1:value1] 是用于标识列表元素的键值对的选择器,[:value] 是用于标识叶列表中的列表元素的值选择器。所有路径中间节点都必须存在。

我相信这不是因为拼写错误,因为我能够通过指定类似spec.ports[1] 的路径将列表中的现有元素替换为kafka 补丁。我无法指定现有端口以使用任何 [key:value] 对覆盖它,并且 spec.ports[-] 不适用于追加到列表末尾。

这不符合我的期望。有人知道我哪里出错了吗?

提前致谢!

【问题讨论】:

标签: kubernetes istio


【解决方案1】:

我花了一些时间来学习这个并让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] 等现有的东西。

现在,我不确定您要通过修改入口网关服务来做什么。据我了解,这些覆盖适用于特定的 Istio 组件,而不是您如何“使用” Istio 本身。

通常,要使用 Istio 添加网关/服务,您可以使用 thisGatewayVirtualService 资源。

【讨论】:

  • 嗨,Rico,感谢您的关注。首先,您对istio-operator 日志的看法是正确的;我得到了同样的错误,我应该把它包括在内。其次,虽然我认为您对 | after value 的看法更正确,但在指定索引而不是键值对时,它似乎在没有 | 的情况下正常工作,所以我猜他们在那里相当宽容。
  • 听起来不错。我想它在指定| 时很灵活
猜你喜欢
  • 2020-08-03
  • 1970-01-01
  • 1970-01-01
  • 2021-04-13
  • 2019-09-18
  • 2021-02-15
  • 1970-01-01
  • 1970-01-01
  • 2011-04-09
相关资源
最近更新 更多