Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 要重定向到主机的Istio ServiceEntry和VirtualService_Kubernetes_Istio_Cockroachdb - Fatal编程技术网

Kubernetes 要重定向到主机的Istio ServiceEntry和VirtualService

Kubernetes 要重定向到主机的Istio ServiceEntry和VirtualService,kubernetes,istio,cockroachdb,Kubernetes,Istio,Cockroachdb,该场景有2个kubernetes集群,配置了Istio复制控制平面,并在kube dns中为.global区域转发。来自发起pod的请求在两个集群中的命名必须一致,这意味着不应直接使用来自发起pod的“.global” 考虑到这一点,我们的想法是让集群1(bar-1.namespace1)中的原始pod到达(foo-1.namespace2),同时让istio将“foo-1.namespace2”的流量重定向到“foo-1.namespace2.global”,以便指向第二个集群的Service

该场景有2个kubernetes集群,配置了Istio复制控制平面,并在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 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的意思是“接听”电话,这样我就不会出现“主机未找到”错误

    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
    

    正如您所说,.global不应该从pod中使用。这是kube dns,它将这些请求重定向到另一个dns吊舱;在istio系统名称空间中。您是否已启动并运行此dns吊舱?您可以共享您的配置吗?IstiocRedons已启动并正在运行,我可以解析任何.global地址,因为kube dns配置具有适当的区域,并转发到承载此区域的IstiocRedons服务。事实上,这是一个有效的配置,因为pod resolv.conf将.global添加到pod名称中,然后istiocordens能够找到它,并将流量引导到适当的端点。我希望有一些更干净的东西,因为使用resolv.conf中的搜索域似乎我“无法”访问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