首页 > 解决方案 > Istio K8sObjectOverlay.PathValue 列表元素不起作用

问题描述

我从 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到端口列表中。

这不起作用,即使文档显示我应该能够指定类似[name:kafka]将元素添加到列表的内容

K8sObjectOverlay.PathValue

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

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

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

提前致谢!

标签: kubernetesistio

解决方案


我花了一些时间学习这一点并让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-ingressgatewayK8s 服务):

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 添加网关/服务,您可以使用类似东西和资源。GatewayVirtualService


推荐阅读