如何让Ingress负载均衡器与Postgres Service使用同一IP?
K8s多域名前端及Postgres部署配置调整方案
场景说明
部署两个前端应用,分别对应域名 test1.mysite.com 和 test2.mysite.com,两个域名均指向IP 162.145.23.123;同时部署Postgres数据库,要求其Service也使用该固定IP。
前端1配置(test1.mysite.com)
kind: Deployment apiVersion: apps/v1 metadata: name: front-app labels: app: front-app spec: selector: matchLabels: app: front-app replicas: 1 template: metadata: labels: app: front-app spec: containers: - name: front-app image: nginx ports: - containerPort: 80 --- kind: Service apiVersion: v1 metadata: name: front-service spec: selector: app: front-app ports: # 镜像默认端口 - port: 80 --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: demo-localhost annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: ingressClassName: nginx rules: - host: test1.mysite.com http: paths: - path: / pathType: Prefix backend: service: name: front-service port: number: 80 status: loadBalancer: ingress: - ip: 162.145.23.123
前端2配置(test2.mysite.com)
kind: Deployment apiVersion: apps/v1 metadata: name: front-app2 labels: app: front-app2 spec: selector: matchLabels: app: front-app2 replicas: 1 template: metadata: labels: app: front-app2 spec: containers: - name: front-app2 image: nginx ports: - containerPort: 80 --- kind: Service apiVersion: v1 metadata: name: front-service2 spec: selector: app: front-app2 ports: # 镜像默认端口 - port: 80 --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: demo-localhost2 annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: ingressClassName: nginx rules: - host: test2.mysite.com http: paths: - path: / pathType: Prefix backend: service: name: front-service2 port: number: 80 status: loadBalancer: ingress: - ip: 162.145.23.123
Postgres配置(调整后)
要让Postgres的LoadBalancer Service使用固定IP 162.145.23.123,需在Service配置中添加 loadBalancerIP 字段(前提是集群所在环境支持指定固定LoadBalancer IP,比如云厂商托管集群或自建集群的LoadBalancer组件支持此功能):
apiVersion: v1 kind: Service metadata: name: hello-pg labels: app: hello-pg spec: type: LoadBalancer loadBalancerIP: 162.145.23.123 # 指定固定IP ports: - port: 5432 targetPort: 5432 protocol: TCP selector: app: hello-pg --- apiVersion: v1 kind: ConfigMap metadata: name: db-secret-credentials labels: app: postgresdb data: POSTGRES_DB: testDB POSTGRES_USER: testUser POSTGRES_PASSWORD: testPassword --- apiVersion: apps/v1 kind: Deployment metadata: name: hello-pg-deployment labels: app: hello-pg spec: replicas: 1 selector: matchLabels: app: hello-pg template: metadata: labels: app: hello-pg spec: containers: - name: hello-pg image: postgres ports: - containerPort: 5432 envFrom: - configMapRef: name: db-secret-credentials
注意事项
- 确保
162.145.23.123是集群LoadBalancer组件可分配的可用IP,且未被其他资源占用; - 部分云厂商可能需要先将该IP预留为静态IP,才能在Service中指定;
- 前端的Ingress已绑定该IP,需确认Ingress Controller的LoadBalancer配置正常,确保域名解析指向该IP后可正常访问前端应用。
内容的提问来源于stack exchange,提问作者Bronems
相关产品推荐
相关产品推荐

