kubernetes - Istio ServiceEntry 和 VirtualService 重定向到主机
问题描述
该场景有 2 个 kubernetes 集群,配置了 Istio 复制控制平面,并在 kube-dns 中为 .global 区域转发。来自原始 pod 的请求在两个集群中的命名必须一致,这意味着不应使用直接来自原始 pod 的“.global”的用法。
考虑到这一点,我们的想法是让集群 1 中的原始 pod (bar-1.namespace1) 到达 (foo-1.namespace2),同时让 istio 将“foo-1.namespace2”的流量重定向到“ foo-1.namespace2.global”,因此它可以被指向第二个集群的 ServiceEntry 拾取。
现在,这是可行的,但只是因为当尝试访问“foo-1.namespace2”时,pod 中的 resolv.conf 中的配置将使用“.global”自动完成调用,但这是一种直接访问资源而不是直接访问资源的方法“失败”是可取的。
想法是有这个工作流程:
- bar-1.namespace1 tris 到达 foo-1.namespace2
- 与“foo-1.namespace2”主机匹配的 ServiceEntry,因此该名称存在于集群 1 中。
- 与“foo-1.namespace2”匹配的 VirtualService,因此它可以路由到不同的目的地,即“foo-1.namespace2.global”
- 匹配“foo-1.namespace2.global”的 ServiceEntry,它实际上负责向集群 2 发送流量。
我不能让这个逻辑按预期工作,因为点“2”和“3”如果存在的话似乎没有任何区别。
此时,我可以在集群之间进行通信,而无需在 pod 内使用“.global”,但这仅仅是因为“.global”是 pod /etc/resolv.conf 中的搜索域。所以第“4”点按预期工作,只是交通如何到达那里不好。
当前的配置是这样的:
ServiceEntry 的意思是“接听”电话,所以我没有收到“找不到主机”错误。
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name: alias-foo-1.namespace2
namespace: namespace1
spec:
hosts:
- foo-1.namespace2
location: MESH_INTERNAL
ports:
- name: cockroachdb-grpc
number: 26257
protocol: TCP
- name: cockroachdb-http
number: 8080
protocol: http
resolution: DNS
VirtualService 旨在将目标转换为名称中带有“.global”的目标。
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: redirect-foo-1.namespace2
namespace: namespace1
spec:
hosts:
- foo-1.namespace2
http:
- route:
- destination:
host: foo-1.namespace2.global
rewrite:
authority: foo-1.namespace2.global
实际将流量发送到第二个集群的 ServiceEntry。这是有效的。
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name: foo-1.namespace2-global
namespace: namespace1
spec:
hosts:
- foo-1.namespace2-global
location: MESH_INTERNAL
ports:
- name: cockroachdb-http
number: 8080
protocol: HTTP
- name: tcp-cockroachdb
number: 26257
protocol: TCP
resolution: DNS
addresses:
- 240.0.4.10
endpoints:
- address: 10.0.0.1
ports:
cockroachdb-http: 15443
tcp-cockroachdb: 15443
解决方案
推荐阅读
- c++ - 运行时带有参数的 Qt 控制台应用程序
- apache-camel - Apache Camel 解压、处理和聚合未完成
- asp.net - Asp.Net Web Api 允许 Url 编码的正向/反向斜杠
- django - 如何创建一个在同一页面上显示所有单选按钮的表单?
- r - 未提供错误行号时如何调试?
- mysql - MySQL GROUP BY 跨三个表的空间搜索速度慢
- python-3.x - AttributeError:“元组”对象没有“翻译”属性
- javascript - 正则表达式检查总是返回 null\false\-1
- r - 1 天的滚动总和,如果值等于 0,则重置
- php - reply_markup 在 php + webhook 中不起作用