入口控制器路由TCP流量

时间:2019-08-06 00:29:26

标签: nginx tcp kubernetes google-cloud-platform nginx-ingress

我正在尝试设置一个入口控制器(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客户端。但是,当我这样做时,出现连接拒绝错误。我在做错什么吗?

1 个答案:

答案 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