问题描述
该方案具有2个配置了Istio复制控制平面的kubernetes集群,以及kube-dns中的.global区域的转发。在两个群集中,从原始Pod发出的请求在命名上必须保持一致,这意味着不应使用直接从原始Pod使用的“ .global”。
考虑到这一点,我们的想法是让群集1(bar-1.namespace1)中的原始Pod可以到达(foo-1.namespace2),同时让istio重定向“ foo-1.namespace2”的流量”添加到“ foo-1.namespace2.global”,以便ServiceEntry可以将其拾取,指向第二个群集。
现在,这是可行的,但仅是因为当尝试访问“ foo-1.namespace2”时,pod中resolv.conf中的配置将使用“ .global”自动完成调用,但可以直接转到资源而不是“失败”。
想法是要具有以下工作流程:
- bar-1.namespace1尝试到达foo-1.namespace2
- 与“ foo-1.namespace2”主机匹配的ServiceEntry,因此此名称存在于群集1中。
- 与“ foo-1.namespace2”匹配的虚拟服务,因此它可以路由到另一个目的地,即“ foo-1.namespace2.global”
- 与“ foo-1.namespace2.global”匹配的ServiceEntry,它实际上负责向群集2发送流量。
我无法使这种逻辑按预期工作,因为点“ 2”和“ 3”似乎没有任何区别。
在这一点上,我可以在群集之间进行通信,而无需从Pod内使用“ .global”,而仅仅是因为“ .global”是Pod /etc/resolv.conf中的搜索域。因此,“ 4”点按预期运行,只是交通到达那里的方式不好。
当前的conf是这样的:
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
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)