如何指向与入口不同的 ns 中的服务

How to point to a service in a different ns than the ingress

我正在考虑使用 https://github.com/kubernetes-sigs/aws-load-balancer-controller

创建白蛋白

假设我有两个命名空间 kubernetes-dashboardotherns

在第一个命名空间中,我有一个名为 kubernetes-dashboard 的服务,在第二个命名空间中,我有一个名为 otherservice

的服务

下面的入口是否有效?

ingress.yml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: general-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP":80,"HTTPS": 443}]'
    alb.ingress.kubernetes.io/certificate-arn: <redacted>
    alb.ingress.kubernetes.io/tags: Environment=staging,Team=dev
    alb.ingress.kubernetes.io/healthcheck-path: /health
    alb.ingress.kubernetes.io/healthcheck-interval-seconds: '300'
spec:
  rules:
    - host: k8s.acme.com
      http:
        paths:
          - path: /*
            backend:
              serviceName: kubernetes-dashboard.kubernetes-dashboard
              servicePort: 8080
    - host: otherservice.acme.com
      http:
        paths:
          - path: /*
            backend:
              serviceName: otherservice.otherns
              servicePort: 80

命名空间是安全边界。命名空间中的 Ingress 资源无法将流量定向到不同命名空间中的服务。如果这可能的话,用户就可以劫持服务的流量。

In the first namespace i have a service called kubernetes-dashboard and in the second namespace i have a service called otherservice

在这种情况下您需要做的是使用两种不同的 Ingress-资源。您仍然可以使用相同的应用程序负载均衡器。

我发现这个问题有两个解决方案。

第二种解决方案对我不起作用,因为我使用的库不支持它。 https://github.com/kubernetes-sigs/aws-load-balancer-controller

  1. 创建多个声明相同的入口文件group.name。

https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/ingress/annotations/#ingressgroup

IngressGroup feature enables you to group multiple Ingress resources together. The controller will automatically merge Ingress rules for all Ingresses within IngressGroup and support them with a single ALB. In addition, most annotations defined on a Ingress only applies to the paths defined by that Ingress.

  1. 使用外部名称服务

https://kubernetes.io/docs/concepts/services-networking/service/#externalname

您可以在与入口相同的命名空间中创建一个 ExternalName 服务,然后您的入口将指向这个特殊的 ExternalName 服务