我正在尝试设置一个入口控制器(nginx),以将一些TCP流量转发到kubernetes服务(GCP)。 this tutorial展示了如何使用nginx将HTTP流量路由到服务(基于路径)。我想要类似的设置来转发TCP流量。
在我的集群中,我有一个Pod运行使用套接字使用python编写的TCP回显服务器。吊舱附带有一项服务。如果将此服务的服务类型设置为LoadBalancer,则可以按以下方式运行客户端,并从集群获取回显。
python client.py --host <EXTERNAL-IP-OF-LOAD-BALANCER> --port <PORT>
类似于echo服务器,我在群集中还有其他TCP服务,可服务于其他Pod。目前,我已将它们全部设置为LoadBalancers。因此,它们具有外部IP,并侦听不同端口上的流量。但是,我不想为所有这些服务创建LoadBalancers。我将如何使用nginx根据端口号将TCP流量路由到其他服务。如果nginx无法做到这一点,我还有其他选择可以实现吗?
更新: 按照HangDu的回答,我创建了以下文件。
apiVersion: v1
kind: ConfigMap
metadata:
name: tcp-services
namespace: default
data:
9000: "default/echo-service:50000"
和
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx
namespace: default
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
type: LoadBalancer
ports:
- name: http
port: 80
targetPort: 80
protocol: TCP
- name: https
port: 443
targetPort: 443
protocol: TCP
- name: proxied-tcp-9000
port: 9000
targetPort: 9000
protocol: TCP
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
然后,我使用kubectl create -f <FILE_NAME>
创建配置映射和服务。因此,我希望可以使用新创建的服务的外部IP和端口9000并运行python client.py --host <EXTERNAL-IP-OF-LOAD-BALANCER> --port 9000
来运行我的echo客户端。但是,当我这样做时,出现连接拒绝错误。我在做错什么吗?
答案 0 :(得分:2)
我在另一个线程上回答了类似的问题。 How to use nginx ingress TCP service on different namespace
基本上,您可以在configmap中指定服务的端口和后端。
以下是文档的链接。 https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/exposing-tcp-udp-services.md