我希望拥有一个内部应用程序负载均衡器,该负载均衡器具有单个内部 IP 地址,用于不同命名空间中的多个服务。
因此,如果我将入口控制器和服务全部部署在一个命名空间中,它就可以工作。但是在一个命名空间中进入而在另一个命名空间中进入服务则不起作用。
这是我的入口控制器和一个名称规范中的两个服务
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ilb-demo-ingress
namespace: namespace1
annotations:
kubernetes.io/ingress.class: "gce-internal"
spec:
rules:
- host: test.de
http:
paths:
- backend:
service:
name: paketmap
port:
number: 80
path: /
pathType: ImplementationSpecific
- host: test2.de
http:
paths:
- backend:
service:
name: hostname
port:
number: 80
path: /
pathType: ImplementationSpecific
服务1
kind: Service
metadata:
name: hostname
namespace: paketmap
annotations:
cloud.google.com/neg: '{"ingress": true}'
spec:
ports:
- name: host1
port: 80
protocol: TCP
targetPort: 9376
selector:
app: hostname
type: ClusterIP
服务2
apiVersion: v1
kind: Service
metadata:
name: paketmap
namespace: namespace1
annotations:
cloud.google.com/neg: '{"ingress": true}'
spec:
ports:
- name: host1
port: 80
protocol: TCP
targetPort: 8080
selector:
app: paketmap
type: ClusterIP
我尝试使用ExternalName Service作为namaspace1中的入口和namespace2中的服务之间的桥梁,但它不起作用。当我部署ExternalName Service时,我没有端点,入口找不到任何后端:翻译失败:入口规范无效:无法在服务“namespace1/hostname-bridge”中找到端口“&ServiceBackendPort{Name:,Number:80,}”
Ingress 不支持跨命名空间引用。所以那是行不通的。
您应该考虑使用新的 Gateway API https://cloud.google.com/kubernetes-engine/docs/concepts/gateway-api
这个新 API 的众多新功能包括后端服务的跨命名空间引用。