我在一个Kubernetes名称空间中有两个荚。一个使用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 但问题是,这些服务中的每一个都分配了单独的IP2 (IP2 & IP4)。但我希望能够使用相同的IP访问TCP和UDP应用程序。在用nginx入口控制器进行测试时,我也面临着与上面相同的问题。
还有其他可能的方法来达到我正在寻找的目标吗?在同一IP上同时公开TCP和UDP服务,但不使用spec.externalIPs
发布于 2021-12-30 10:45:54
https://stackoverflow.com/questions/70358627
复制相似问题