【问题标题】:Ingress controller to route TCP traffic入口控制器路由 TCP 流量
【发布时间】:2020-06-04 12:29:21
【问题描述】:

我正在尝试设置一个入口控制器 (nginx) 以将一些 TCP 流量转发到 kubernetes 服务 (GCP)。 this tutorial 展示了如何使用 nginx 将 HTTP 流量路由到服务(基于路径)。我想要一个类似的设置来转发 TCP 流量。

在我的集群中,我有一个运行 TCP 回显服务器的 Pod,该服务器使用 Python 使用套接字编写。有一个附加到 pod 的服务。如果我将此服务的服务类型设置为 LoadBalancer,我可以如下运行我的客户端并从集群中获取回显。

python client.py --host <EXTERNAL-IP-OF-LOAD-BALANCER> --port <PORT>

与回显服务器类似,我的集群中有其他 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 &lt;FILE_NAME&gt; 创建配置映射和服务。所以我希望我可以使用新创建的服务的外部 IP 和端口 9000 并运行 python client.py --host &lt;EXTERNAL-IP-OF-LOAD-BALANCER&gt; --port 9000 来运行我的 echo 客户端。但是,当我这样做时,我得到一个连接被拒绝的错误。我做错了吗?

【问题讨论】:

  • 您的nginx-ingress-controller pod 在命名空间default 中吗?
  • 是的。我知道我应该使用多个命名空间,但目前我在默认命名空间中有入口。
  • 我忘记将"--tcp-services-configmap=default/tcp-services" 添加到 nginx-ingress pod 的参数中。它现在正在工作
  • @rasthiya 如何将它添加到 nginx-ingress pod?我使用 azure 安装程序安装了 ingress nginx。一旦它在我的系统上,它就全部设置好了,但没有显示出来。
  • @mjwrazor 我已经修改了部署 yaml 文件。在 Azure 中没有做过类似的事情,但在 google GKE 中你只需转到工作负载并编辑相应的 yaml 文件。

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


【解决方案1】:

我在另一个帖子上回答了类似的问题。 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

【讨论】:

  • 您能帮我解决我的问题吗?我完全描述了它......如果你能在类似的问题上帮助我,请。尽管我使用 Helm 以完全不同的方式将“入口”安装为服务,但这就是我感到困惑的原因......谢谢! stackoverflow.com/questions/66190275/…
猜你喜欢
  • 1970-01-01
  • 2020-02-12
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
  • 2021-10-30
  • 1970-01-01
  • 2020-10-22
  • 2017-08-15
相关资源
最近更新 更多