我正在使用Nginx Ingress控制器打开带有--tcp-services-configmap=k8s-ingress/k8s-ingress-tcp
标志的与postgres数据库的连接。该配置图看起来像
apiVersion: v1
data:
"5432": namespace-a/the-postgres-svc:5432
kind: ConfigMap
这部分工作正常,但是我想在同一端口5432
到namespace-b/the-postgres-svc:5432
上打开另一个服务。
是否有任何方法可以使选择的命名空间基于入口资源中的命名空间?由于如果仅将记录添加到“ namespace-a”记录之后,数据键将是相同的,因此我不能仅将其追加到configmap数据。
谢谢!
答案 0 :(得分:0)
因此,您希望在不同名称空间的同一端口上具有服务。 我发现这种方法很有趣step-by-step tutorial。
首先,您应该创建两个名称空间:
apiVersion: v1
kind: Namespace
metadata:
name: namespace-a
apiVersion: v1
kind: Namespace
metadata:
name: namespace-b
除了您的服务和部署定义之外,name
和namespace
字段之间的区别是:
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: /