kubernetes - 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[-]
不适用于附加到列表末尾。
这不符合我的期望。有谁知道我哪里出错了?
提前致谢!
解决方案
我花了一些时间学习这一点并让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 添加网关/服务,您可以使用类似的东西和资源。Gateway
VirtualService
推荐阅读
- kubernetes - 同一 Deployment 中 Pod 的 Pop 到 Pod 通信
- sqlite - 从间接关系中获取数据
- sap - SAP 连接器 3.0 和使用适配器服务
- javascript - 当我想从一个 Restful Web 服务获取 JSON 时什么都没有发生
- sql - 如何将一行拆分为多行 SQL Server?
- c# - 显示上个月创建的文件夹 C#
- quill - Quill 代码块格式化
- excel - Concat,Concatenate,TextJoin,都返回'#NAME?'
- javascript - 如何使用 Javascript 检测“屏幕截图”
- docker - Flask url_for 由 docker 运行时生成 http 而不是 https