【问题标题】:How to create only internal load balancer with ingress-nginx chart?如何使用 ingress-nginx 图表仅创建内部负载均衡器?
【发布时间】:2021-04-21 21:52:49
【问题描述】:

在我的 AWS EKS 中,我使用以下命令安装了 nginx-ingress:

helm upgrade --install -f controller.yaml \
    --namespace nginx-ingress \
    --create-namespace \
    --version 3.26.0 \
    nginx-ingress ingress-nginx/ingress-nginx 

controller.yaml 文件如下所示:

controller:
  ingressClass: nginx-internal
  service:
    internal:
      enabled: true
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0

我的应用程序很少,每个应用程序的单独入口具有不同的虚拟主机,我希望所有入口对象都指向内部负载平衡器, 即使我在应用程序的入口设置ingressClass,它们似乎指向公共负载均衡器:

kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx-internal

那么,有没有办法只创建一个内部负载平衡器,其入口指向该负载平衡器?

谢谢

【问题讨论】:

    标签: kubernetes-helm amazon-eks nginx-ingress


    【解决方案1】:

    在您的controller.yaml 中注意到您启用了internal 设置。根据documentation 的说法,此设置会创建两个负载均衡器,一个外部的和一个内部的,以防您希望将一些应用程序公开到 Internet,而其他应用程序只在同一 k8s 集群中的 vpc 内公开。

    如果您只需要一个内部负载均衡器,请尝试像这样设置controller.yaml

    controller:
      service:
        annotations:
          service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
          service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: 'true'
          service.beta.kubernetes.io/aws-load-balancer-type: nlb
          service.beta.kubernetes.io/aws-load-balancer-internal: "true" 
          service.beta.kubernetes.io/aws-load-balancer-subnets: "subnet-xxxxx,subnet-yyyyy,subnet-zzzzz"
    

    它将只提供一个在内部路由流量的 NBL。

    使用service.beta.kubernetes.io/aws-load-balancer-subnets 注释,您可以选择负载均衡器将流量路由到哪些可用区/子网。

    如果您删除 service.beta.kubernetes.io/aws-load-balancer-type 注释,则会配置 Classic Load Balancer 而不是网络。

    【讨论】:

    • 每当我将service.beta.kubernetes.io/aws-load-balancer-scheme 设置为internal 时,按照您的说明(以及互联网上的几乎所有其他说明),它都会提供internet-facing NLB。有什么想法吗?
    【解决方案2】:

    我设法通过使用以下controller.yaml 来完成这项工作

    controller:
      ingressClassByName: true
      
      ingressClassResource:
        name: nginx-internal
        enabled: true
        default: false
        controllerValue: "k8s.io/ingress-nginx-internal"
    
      service:
        # Disable the external LB
        external:
          enabled: false
    
        # Enable the internal LB. The annotations are important here, without
        # these you will get a "classic" loadbalancer
        internal:
          enabled: true
          annotations:
            service.beta.kubernetes.io/aws-load-balancer-internal: "true"
            service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
            service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: 'true'
            service.beta.kubernetes.io/aws-load-balancer-type: nlb
    

    那么你可以使用ingressClassName如下

    kind: Ingress
    spec:
      ingressClassName: nginx-internal
    

    这不是必需的,但我将它部署到反映内部唯一入口的命名空间

    helm upgrade --install \
      --create-namespace ingress-nginx-internal ingress-nginx/ingress-nginx \
      --namespace ingress-nginx-internal \
      -f controller.yaml
    

    【讨论】:

      【解决方案3】:

      根据@rmakoto 的回答,似乎缺少一些配置,以便告诉 AWS 创建一个内部 NLB。我已经尝试了以下配置,现在它可以正常工作:

      controller:
        service:
          annotations:
            service.beta.kubernetes.io/aws-load-balancer-name: "k8s-nlb"
            service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
            service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: "true"
            service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
            service.beta.kubernetes.io/aws-load-balancer-internal: "true"
            service.beta.kubernetes.io/aws-load-balancer-scheme: "internal"
            service.beta.kubernetes.io/aws-load-balancer-subnets: "subnet-xxx,subnet-yyy,subnet-zzz"
      

      现在要部署运行以下命令:

      helm upgrade --install \
        --create-namespace ingress-nginx nginx-stable/nginx-ingress \
        --namespace ingress-nginx \
        -f controller.yaml
      

      【讨论】:

        【解决方案4】:

        如果您只想要经典的 ELB。这对我有用。

          controller:
            service:
              external:
                enabled: false
              internal:
                enabled: true
                annotations:
                  service.beta.kubernetes.io/aws-load-balancer-internal: "true"
        
        

        【讨论】:

          猜你喜欢
          • 2019-06-20
          • 2022-01-14
          • 1970-01-01
          • 2021-12-24
          • 2019-06-06
          • 1970-01-01
          • 1970-01-01
          • 2016-05-12
          • 2015-08-20
          相关资源
          最近更新 更多