首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在同一个IP上连接到Kubernetes TCP和UDP服务

在同一个IP上连接到Kubernetes TCP和UDP服务
EN

Stack Overflow用户
提问于 2021-12-15 04:55:56
回答 1查看 688关注 0票数 1

我在一个Kubernetes名称空间中有两个荚。一个使用TCP,另一个使用UDP,它们都是通过外部IP使用ClusterIP服务公开的。这两个服务使用相同的外部IP。

通过这种方式,我让我的用户使用相同的IP访问两个服务。我希望删除spec.externalIPs的使用,但允许我的用户仍然使用单个域名/IP访问TCPUDP服务。

我不想使用spec.externalIPs,所以我认为不能使用clusterIP和NodePort服务。TCP负载均衡器服务不允许我在同一服务中同时指定​和UDP

我试验过NGINX入侵控制器。但是即使在那里,负载均衡器服务也需要创建,它不能同时支持同一个服务中的TCPUDP

下面是公开当前使用外部IP的应用程序的集群IP服务:

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  labels:
    app: tcp-udp-svc
  name: tcp-udp-service
spec:
  externalIPs:
  - <public IP- IP2>
  ports:
  - name: tcp-exp
    port: 33001
    protocol: TCP
    targetPort: 33001
  - name: udp-exp
    port: 33001
    protocol: UDP
    targetPort: 33001
  selector:
    app: tcp-udp-app
  sessionAffinity: None
  type: ClusterIP

该服务如下所示

代码语言:javascript
复制
NAME                  TYPE           CLUSTER-IP            EXTERNAL-IP        PORT(S)
tcp-udp-service       ClusterIP      <internal IP IP1>     <public IP- IP2>   33001/TCP,33001/UDP

使用上述设置,端口33001上的TCPUDP应用程序都可以从外部使用IP2访问。

如你所见,我用过:

代码语言:javascript
复制
spec:
  externalIPs:
  - <public IP- IP2>

在服务中,使其可从外部访问。

但是我不想使用这个设置。我正在寻找一个设置不使用spec.externalIPs

当使用负载均衡器服务公开应用程序时,我发现TCPUDP都不能添加到同一个负载均衡器服务中。因此,我必须为TCP创建一个负载均衡器服务,并为UDP添加另一个负载平衡器服务,如下所示

代码语言:javascript
复制
NAME                TYPE           CLUSTER-IP            EXTERNAL-IP        PORT(S)
tcp-service         LoadBalancer   <internal IP IP1>     <public IP- IP2>   33001/TCP

udp-service         LoadBalancer   <internal IP IP3>     <public IP- IP4>   33001/UDP


---
apiVersion: v1
kind: Service
metadata:
  name: tcp-service 
 spec:
  externalTrafficPolicy: Cluster
  ports:
  - name: tcp-svc
    port: 33001
    protocol: TCP
    targetPort: 33001
  selector:
     app: tcp-udp-app
  sessionAffinity: None
  type: LoadBalancer

---
apiVersion: v1
kind: Service
metadata:
  name: udp-service
 spec:
  externalTrafficPolicy: Cluster
  ports:
  - name: udp-svc
    port: 33001
    protocol: UDP
    targetPort: 33001
  selector:
     app: tcp-udp-app
  sessionAffinity: None
  type: LoadBalancer 

但问题是,这些服务中的每一个都分配了单独的IP2 (IP2 & IP4)。但我希望能够使用相同的IP访问TCP和UDP应用程序。在用nginx入口控制器进行测试时,我也面临着与上面相同的问题。

还有其他可能的方法来达到我正在寻找的目标吗?在同一IP上同时公开TCP和UDP服务,但不使用spec.externalIPs

EN

回答 1

Stack Overflow用户

发布于 2021-12-30 10:45:54

不幸的是,你将无法达到你想要的结果负载均衡器。因为根据下列文件协议,任何VPC负载均衡器类型都不支持服务类型。

理论上,您可以通过使用LoadBalancer注释为loadBalancerIP服务类型定义一个可移植的公共IP地址,但是这个可移植的公共IP地址必须可以在便携式公共子网前端和Cloud支持UDP协议的LB需求中使用。你可以看到这位医生

非Prod设置的解决方案:

您可以使用hostPort直接在工作节点上使用曝露 TCP和UDP端口。可以与一些支持TCP和UDP服务的Ingress控制器一起使用,比如NGINX Ingress。有关更多信息,请参见这份文件

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70358627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档