nginx - 用于路由 TCP 流量的入口 Controller

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

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

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

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

与回显服务器类似,我的集群中有其他 TCP 服务为其他 pod 提供服务。目前我已将它们全部设置为 LoadBalancers。因此,它们具有外部 IP 并监听不同端口上的流量。但是,我不想为所有这些服务创建 LoadBalancer。我将如何使用 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运行我的回声客户端。但是,当我这样做时,我收到连接被拒绝的错误。难道我做错了什么?

最佳答案

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

关于nginx - 用于路由 TCP 流量的入口 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57367478/

相关文章:

select - 从 Go channel 获取值(value)

相当于 'kubectl apply' 的 Kubernetes API 调用

kubernetes - 使用 kubectl 命令从远程 url 传递 list 文件

docker - 使用 nginx 在 docker 中托管时缺少 Blazor WASM 样式

regex - 尝试优化掉 Nginx 正则表达式是否值得?

ssl - 字符串.h :29:8: error: expected identifier

kubernetes - 何时使用 NodePort、ClusterIP、LoadBalancer、Headless 作为 Ingress 的后端?

python - 我需要一些有关静态和媒体文件的建议

C++ select() 减少文件描述符计数

http - 杀死已经在使用的绑定(bind) tcp 连接