【发布时间】:2022-01-18 08:10:06
【问题描述】:
我在 Kubernetes 命名空间中有 2 个 pod。一个使用TCP,另一个使用UDP,两者都通过外部IP使用ClusterIP服务公开。两种服务使用相同的外部 IP。
这样我让我的用户使用相同的 IP 访问这两个服务。
我想删除spec.externalIPs 的使用,但能够允许我的用户仍然使用单个域名/IP 来访问TCP 和UDP 服务。
我不想使用spec.externalIPs,所以我认为clusterIP和NodePort服务不能使用。负载均衡器服务不允许我在同一个服务中同时指定 TCP 和 UDP。
我已经尝试过 NGINX 入口控制器。但即使在那里也需要创建负载均衡器服务,它不能在同一服务中同时支持TCP 和UDP。
以下是集群 IP 服务暴露当前使用外部 IP 的应用程序:
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
服务如下所示
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
tcp-udp-service ClusterIP <internal IP IP1> <public IP- IP2> 33001/TCP,33001/UDP
使用上述设置,端口 33001 上的 TCP 和 UDP 应用程序都可以使用 IP2 从外部正常访问。
如你所见,我使用过:
spec:
externalIPs:
- <public IP- IP2>
在服务中使其可被外部访问。
但是我不想使用这个设置,即。我正在寻找不使用spec.externalIPs 的设置。
当使用负载均衡器服务公开应用程序时,我看到TCP 和UDP 不能同时添加到同一个负载均衡器服务中。所以我必须为TCP 创建一个负载均衡器服务,并为UDP 添加另一个负载均衡器服务,如下所示
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
但问题是这些服务中的每一个都分配了单独的 IP(IP2 和 IP4)。 但我希望能够使用相同的 IP 访问 TCP 和 UDP 应用程序。在使用 nginx 入口控制器进行测试时,我也面临与上述相同的问题。
有没有其他可能的方法来实现我正在寻找的东西,即。在同一个 IP 上同时公开 TCP 和 UDP 服务,但不使用 spec.externalIPs?
【问题讨论】:
-
您使用的是哪个版本的 Kubernetes,您是如何设置集群的?您是否使用裸机安装或某些云提供商?重现您的问题很重要。
-
@Mikołaj Głodziak Kubernetes 1.20 版 IKS 集群
-
请提供您的 yaml 文件以重现您的情况。
-
嗨@Mikołaj Głodziak,我已经编辑了问题以添加yaml
-
为什么需要在同一个 IP 上公开 TCP 和 UDP 服务而不指定
spec.externalIP?
标签: kubernetes kubernetes-ingress