使用Nginx Ingress将TCP流量发送到入口的名称空间

时间:2019-08-26 21:23:55

标签: kubernetes nginx-ingress

我正在使用Nginx Ingress控制器打开带有--tcp-services-configmap=k8s-ingress/k8s-ingress-tcp标志的与postgres数据库的连接。该配置图看起来像

apiVersion: v1
data:
  "5432": namespace-a/the-postgres-svc:5432
kind: ConfigMap

这部分工作正常,但是我想在同一端口5432namespace-b/the-postgres-svc:5432上打开另一个服务。

是否有任何方法可以使选择的命名空间基于入口资源中的命名空间?由于如果仅将记录添加到“ namespace-a”记录之后,数据键将是相同的,因此我不能仅将其追加到configmap数据。

谢谢!

1 个答案:

答案 0 :(得分:0)

因此,您希望在不同名称空间的同一端口上具有服务。 我发现这种方法很有趣step-by-step tutorial

首先,您应该创建两个名称空间:

apiVersion: v1
kind: Namespace
metadata:
  name: namespace-a

apiVersion: v1
kind: Namespace
metadata:
  name: namespace-b

除了您的服务和部署定义之外,namenamespace字段之间的区别是:

apiVersion: v1
kind: Service
metadata:
  labels:
    run: nginx
  name: namespacea-nginx
  namespace: namespace-a
spec:
  ports:
  - port: 5432
    protocol: TCP
    targetPort: 5432
  selector:
    run: nginx

apiVersion: v1
kind: Service
metadata:
  labels:
    run: nginx
  name: namespaceb-nginx
  namespace: namespace-b
spec:
  ports:
  - port: 5432
    protocol: TCP
    targetPort: 5432
  selector:
    run: nginx

部署文件:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    run: nginx
  name: nginx
  namespace: namespace-a
spec:
  ...

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    run: nginx
  name: nginx
  namespace: namespace-b
spec:
  ...

最后,Ingress文件定义:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-ingress
  namespace: namespace-a
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: namespacea.com
    http:
      paths:
      - backend:
          serviceName: namespacea-nginx
          servicePort: 5432
        path: /

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-ingress
  namespace: namespace-b
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: namespaceb.com
    http:
      paths:
      - backend:
          serviceName: namespaceb-nginx
          servicePort: 5432
        path: /