是否可以让 Ingress 指向另一个命名空间中的服务?

Dan*_*iel 12 kubernetes kubernetes-ingress kubernetes-service

我想要做的是在default命名空间中拥有一个服务,并在其他命名空间中拥有指向该服务的入口。我尝试实现如下所示的服务和 Ingress,但没有成功。

kind: Service
apiVersion: v1
metadata:
  name: serviceX
  namespace: default
spec:
  type: ExternalName
  externalName: serviceX.default.svc.cluster.local
ports:
- port: 123


kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name: web-ingress-test-vpndev
  namespace: my-namespace
spec:
  tls:
  - hosts:
    - abc.my-namespace.domain.com
    secretName: tls-secret-my-namespace
  rules:
  - http:
      paths:
      - path: "/"
        backend:
          serviceName: serviceX
          servicePort: 123
status:
  loadBalancer:
    ingress: {}
Run Code Online (Sandbox Code Playgroud)

我知道我可以在每个命名空间中实现该服务,但我想知道是否可以拥有单个服务。如果我尝试externalName在入口的处理程序中输入服务的名称backend->serviceName,则会收到错误消息,指出服务的名称只能包含数字、字母和“-”。

Dáv*_*nár 5

我认为这是不可能的,也不认为这是一个好主意。Ingress 不是集群级别的资源。每个命名空间都应该有自己的实例。


Vam*_*e_D 4

我不得不说,这不是一个好办法。因为不同 NS 中的所有 ingress 都会转换为 Nginx Rule 并在 ingress-controller pod 中生效。

如果你看一下 Nginx 规则(nginx.conf在 ingress-controller pod 中),你会看到 ingress 的每个块location都有nginx.conf变量set $namespace "****";,这意味着入口已被 NS 隔离

另外,如果您仍然想实现您的想法,可能需要修改入口控制器。