Istio ServiceEntry和VirtualService重定向到主机

问题描述

该方案具有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”自动完成调用,但可以直接转到资源而不是“失败”。

想法是要具有以下工作流程:

  1. bar-1.namespace1尝试到达foo-1.namespace2
  2. 与“ foo-1.namespace2”主机匹配的ServiceEntry,因此此名称存在于群集1中。
  3. 与“ foo-1.namespace2”匹配的虚拟服务,因此它可以路由到另一个目的地,即“ foo-1.namespace2.global”
  4. 与“ 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...