首页 > 解决方案 > 如何指向与入口不同的 ns 中的服务

问题描述

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

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

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

下面的入口会起作用吗?

入口.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

标签: kuberneteskubernetes-ingressaws-load-balancer

解决方案


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

第二种解决方案对我不起作用,因为我使用的库不支持它。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 功能使您可以将多个 Ingress 资源组合在一起。控制器将自动合并 IngressGroup 中所有 Ingress 的 Ingress 规则,并通过单个 ALB 支持它们。此外,在 Ingress 上定义的大多数注解仅适用于该 Ingress 定义的路径。

  1. 使用 externalName 服务

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

您可以在与 ingress 相同的命名空间中创建ExternalName服务,然后您的 ingress 将指向此特殊ExternalName服务


推荐阅读