首页 > 解决方案 > 如何在不同的命名空间上使用 nginx 入口 TCP 服务

问题描述

我在 kubernetes 集群中部署了两个命名空间。命名空间 A 主机 mysql 和命名空间 B 运行 postgress 并在这些端口上公开它们的服务部署

Namespace(A) - mysql - port (3306)
Namespace(B) - postgress - port (5432)

我需要使用 nginx-ingress kubernetes 集群来路由流量,这里是入口的示例 YAML 文件

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: mysql-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: mysql-ingress
    http:
      paths:
      - path: /mysql
        backend:
          serviceName: mysql
          servicePort: 3306

这个 YAML 文件比较适合 HTTP 类的服务,如何使用 nginx-ingress 实现 TCP 服务

标签: nginxkubernetesnginx-reverse-proxynginx-ingress

解决方案


您可以参考以下文档来公开 tcp 和 udp 服务。

https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/exposing-tcp-udp-services.md

在我的集群中,入口控制器安装在 ingress-nginx 命名空间上。您可以从 configmap 获取 tcp 服务。

kubectl get cm -n ingress-nginx tcp-services -o yaml

基本上,您只需为您的两个数据库指定服务。

data:
  "3306": NamespaceA/mysql:3306
  "5432": NamespaceB/postgress:5432

推荐阅读