Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.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
Istio(1.0)内部复制集路由-支持Kubernetes部署中POD之间的流量_Kubernetes_Infinispan_Jgroups_Istio_Envoyproxy - Fatal编程技术网

Istio(1.0)内部复制集路由-支持Kubernetes部署中POD之间的流量

Istio(1.0)内部复制集路由-支持Kubernetes部署中POD之间的流量,kubernetes,infinispan,jgroups,istio,envoyproxy,Kubernetes,Infinispan,Jgroups,Istio,Envoyproxy,Istio如何支持同一服务(或更具体地说是ReplicaSet)中的POD之间基于IP的路由 我们希望在Istio网格中部署副本>1的Tomcat应用程序。该应用程序运行Infinispan,它使用JGroups来整理通信和集群。JGroups需要识别其集群成员,为此有KUBE_PING(用于JGroups的Kubernetes发现协议)。它将使用类似于kubectl get pods的查找来查询K8S API。集群成员可以是其他服务中的pod,也可以是同一服务/部署中的pod 尽管我们的问题是

Istio如何支持同一服务(或更具体地说是ReplicaSet)中的POD之间基于IP的路由

我们希望在Istio网格中部署副本>1的Tomcat应用程序。该应用程序运行Infinispan,它使用JGroups来整理通信和集群。JGroups需要识别其集群成员,为此有KUBE_PING(用于JGroups的Kubernetes发现协议)。它将使用类似于kubectl get pods的查找来查询K8S API。集群成员可以是其他服务中的pod,也可以是同一服务/部署中的pod

尽管我们的问题是由相当具体的需求驱动的,但这个主题是通用的。我们如何使POD在副本集中相互通信

示例:作为展示,我们部署了演示应用程序。有关资料如下:

apiVersion: v1
items:
- apiVersion: extensions/v1beta1
  kind: Deployment
  metadata:
    name: ispn-perf-test
    namespace: my-non-istio-namespace
  spec:
    replicas: 3
< -- edited for brevity -- >
请注意,下面的输出很宽-您可能需要向右滚动以获取IPs

kubectl get pods -n my-istio-namespace -o wide
NAME                                                READY     STATUS    RESTARTS   AGE       IP            NODE
ispn-perf-test-558666c5c6-g9jb5                     2/2       Running   0          1d        10.44.4.63    gke-main-pool-4cpu-15gb-98b104f4-v9bl
ispn-perf-test-558666c5c6-lbvqf                     2/2       Running   0          1d        10.44.4.64    gke-main-pool-4cpu-15gb-98b104f4-v9bl
ispn-perf-test-558666c5c6-lhrpb                     2/2       Running   0          1d        10.44.3.22    gke-main-pool-4cpu-15gb-98b104f4-x8ln

kubectl get service ispn-perf-test-service -n my-istio-namespace
NAME                     TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)                      AGE
ispn-perf-test-service   ClusterIP   10.41.13.74   <none>        7800/TCP,7900/TCP,9000/TCP   1d
kubectl get pods-n我的istio命名空间-o宽
名称就绪状态重新启动老化IP节点
ispn-perf-test-558666c5c6-g9jb5 2/2运行0 1d 10.44.4.63 gke-main-pool-4cpu-15gb-98b104f4-v9bl
ispn-perf-test-558666c5c6-lbvqf 2/2运行0 1d 10.44.4.64 gke-main-pool-4cpu-15gb-98b104f4-v9bl
ispn-perf-test-558666c5c6-lhrpb 2/2运行0 1d 10.44.3.22 gke-main-pool-4cpu-15gb-98b104f4-x8ln
kubectl获取服务ispn性能测试服务-n我的istio命名空间
名称类型CLUSTER-IP外部IP端口年龄
ispn性能测试服务群集IP 10.41.13.74 7800/TCP、7900/TCP、9000/TCP 1d
在下面的指导下,让我们看一下其中一个POD的结果:

istioctl proxy-config listeners ispn-perf-test-558666c5c6-g9jb5 -n my-istio-namespace
ADDRESS          PORT      TYPE
10.44.4.63       7900      TCP
10.44.4.63       7800      TCP
10.44.4.63       9000      TCP
10.41.13.74      7900      TCP
10.41.13.74      9000      TCP
10.41.13.74      7800      TCP
< -- edited for brevity -- >
istioctl代理配置侦听器ispn-perf-test-558666c5c6-g9jb5-n我的istio命名空间
地址端口类型
10.44.4.63 7900 TCP
10.44.4.63 7800 TCP
10.44.4.63 9000 TCP
10.41.13.74 7900 TCP
10.41.13.74 9000 TCP
10.41.13.74 7800 TCP
<--为简洁而编辑-->
Istio文档将上述侦听器描述为

从接收相关IP:端口对的出站非HTTP流量 监听器
0.0.0.0_15001

这一切都是有道理的。pod ispn-perf-test-558666c5c6-g9jb5可在10.44.4.63上到达自身,并通过10.41.13.74进行维修。但是如果pod将数据包发送到10.44.4.64或10.44.3.22怎么办?这些IP在侦听器中不存在,因此请注意,ispn-perf-test-558666c5c6-g9jb5无法访问这两个“兄弟”播客


Istio今天能支持吗?那么如何支持呢?

您是对的,HTTP路由只支持通过服务名称或服务VIP进行本地访问或远程访问

也就是说,对于上面的特定示例,其中服务端口名为“1”、“2”、“3”,路由将是所述的普通TCP。因此,您的示例应该有效。吊舱ispn-perf-test-558666c5c6-g9jb5可在10.44.4.63上到达自身,其他吊舱可在10.44.4.64和10.44.3.22上到达

如果将端口重命名为“http 1”、“http 2”和“http 3”,则http路由将启动,RDS配置将远程调用限制为使用可识别服务域的端口

要查看RDF配置中的差异,请在端口名为“one”和端口名更改为“httpone”时查看以下命令的输出

对于名为“one”的端口,它将不返回任何路由,因此将应用TCP路由,但在“http one”情况下,路由将受到限制


我不知道是否有办法在HTTP情况下向RDS域添加额外的远程pod IP地址。我建议打开一个Istio问题,看看是否可能。

您在Istio服务网格中启用了吗?否。没有启用MTL。JGroups协议不是基于HTTP的,因此端口名中没有“HTTP-”。正如您所指出的,更改端口名会产生不同的结果。运行istioctl代理配置侦听器会生成:“0.0.0.0 7800 HTTP”。7900和9000也一样。映射到ispn性能测试服务的IP也是如此:“10.44.4.188 9000 HTTP”等等。但是我看不出非http JGroups流量将如何通过那里。找到了这个条目,它确认了所寻求的功能既不存在,也不打算存在。看起来:ServiceEntry可能是一个前进的方向。
istioctl proxy-config listeners ispn-perf-test-558666c5c6-g9jb5 -n my-istio-namespace
ADDRESS          PORT      TYPE
10.44.4.63       7900      TCP
10.44.4.63       7800      TCP
10.44.4.63       9000      TCP
10.41.13.74      7900      TCP
10.41.13.74      9000      TCP
10.41.13.74      7800      TCP
< -- edited for brevity -- >
istioctl proxy-config routes ispn-perf-test-558666c5c6-g9jb5 -n my-istio-namespace  --name 7800 -o json