【问题标题】:ALB Ingress Controller on AWSAWS 上的 ALB 入口控制器
【发布时间】:2020-01-10 18:14:52
【问题描述】:

我正在尝试在 AWS-EKS 上设置 ALB 入口控制器,正如以下教程所述:ingress_controller_alb,但我无法获得入口地址。

确实,如果我运行以下命令:kubectl get ingress/2048-ingress -n 2048-game,10 分钟后我没有得到地址。有什么想法吗?

【问题讨论】:

    标签: amazon-web-services kubernetes-ingress amazon-eks


    【解决方案1】:

    问题可能出在您使用的 aws-controller 版本中 - 您使用的是旧版本的入口控制器 - 1.0.0,新版本是 1.1.3。

    我建议您查看此文档:ingress-controller-alb

    1. 下载示例 ALB 入口控制器清单

    wget https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.3/docs/examples/alb-ingress-controller.yaml
    

    2.配置 ALB 入口控制器清单

    至少,编辑以下变量:

    --cluster-name=devCluster: name of the cluster. AWS resources will be tagged with kubernetes.io/cluster/devCluster:owned
    

    如果控制器 pod 中的 ec2metadata 不可用,请编辑以下变量:

    --aws-vpc-id=vpc-xxxxxx: vpc ID of the cluster.
    --aws-region=us-west-1: AWS region of the cluster.
    

    3. 部署 RBAC 角色清单

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.3/docs/examples/rbac-role.yaml
    

    4. 部署 ALB 入口控制器清单

    kubectl apply -f alb-ingress-controller.yaml
    

    5. 验证部署是否成功并且控制器已启动

    kubectl logs -n kube-system $(kubectl get po -n kube-system | egrep -o "alb-ingress[a-zA-Z0-9-]+")
    

    您应该能够显示类似于以下内容的输出:

    -------------------------------------------------------------------------------
    AWS ALB Ingress controller
    Release:    1.0.0
    Build:      git-7bc1850b
    Repository: https://github.com/kubernetes-sigs/aws-alb-ingress-controller.git
    -------------------------------------------------------------------------------
    

    然后您就可以部署示例应用程序了

    执行以下命令:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.3/docs/examples/2048/2048-namespace.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.3/docs/examples/2048/2048-deployment.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.3/docs/examples/2048/2048-service.yaml
    

    为 2048 游戏部署 Ingress 资源:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.3/docs/examples/2048/2048-ingress.yaml
    

    几秒钟后,验证 Ingress 资源是否已启用:

    kubectl get ingress/2048-ingress -n 2048-game
    

    【讨论】:

    • 我已经遵循了以上所有内容。我正在使用 EKS Fargate。并创建入口但不提供主机地址。我在控制器 pod 日志中看到的错误如下。 {"level":"error","ts":1643650856.9675832,"logger":"controller-runtime.manager.controller.ingress","msg":"Reconciler error","name":"app-ingress", "namespace":"backend","error":"WebIdentityErr: 检索凭据失败\n由: RequestError: 发送请求失败\n由: Post \"sts.us-east-1.amazonaws.com\": dial tcp: i/o timeout"}非常感谢任何帮助
    【解决方案2】:

    我在同样的问题上苦苦挣扎,但在遵循上述@MaggieO 步骤后终于让它工作了。有几点需要考虑:

    1. 将公有和私有子网添加到您的 EKS 集群。确保您的公共子网标记为“kubernetes.io/role/elb”:“1”。如果创建托管节点组,请仅选择私有子网来放置您的工作节点。
    2. 确保您的工作线程节点的 IAM 角色具有 AmazonEKSWorkerNodePolicy、AmazonEC2ContainerRegistryReadOnly、AmazonEKS_CNI_Policy 策略和此处定义的自定义策略 https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.2/docs/examples/iam-policy.json
    3. 检查您的入口控制器日志,它们很有帮助。

      kubectl logs -n kube-system [入口控制器的名称]

    【讨论】:

      【解决方案3】:

      感谢您的回复!

      我认为问题在于集群创建导致在没有 EC2 实例的情况下创建集群,使用命令 eksctl cluster create -f cluster.yaml

      apiVersion: eksctl.io/v1alpha5
      kind: ClusterConfig
      metadata:
        name: test
        region: eu-central-1
        version: "1.14"
      vpc:
        id: vpc-50b17738
        subnets:
          private:
            eu-central-1a: { id: subnet-aee763c6 }
            eu-central-1b: { id: subnet-bc2ee6c6 }
            eu-central-1c: { id: subnet-24734d6e }
      nodeGroups:
        - name: ng-1-workers
          labels: { role: workers }
          instanceType: t3.medium
          desiredCapacity: 2
          volumeSize: 5
          privateNetworking: true
      

      我尝试使用节点组和托管节点组,但出现以下超时错误:

      ...
      [ℹ]  nodegroup "ng-1-workers" has 0 node(s)
      [ℹ]  waiting for at least 2 node(s) to become ready in "ng-1-workers"
      Error: timed out (after 25m0s) waiting for at least 2 nodes to join the cluster and become ready in "ng-1-workers"
      

      【讨论】:

        【解决方案4】:

        如果你成功创建控制器,你会发现这个控制器:

        $ kubectl get po -n kube-system | grep alb
        alb-ingress-controller-669b958f64-p69fw               1/1     Running   0          3m7s
        

        及其日志:

        $ kubectl logs -n kube-system $(kubectl get po -n kube-system | egrep -o alb-ingress[a-zA-Z0-9-]+)
        -------------------------------------------------------------------------------
        AWS ALB Ingress controller
          Release:    v1.1.8
          Build:      git-ec387ad1
          Repository: https://github.com/kubernetes-sigs/aws-alb-ingress-controller.git
        -------------------------------------------------------------------------------
        
        W0720 13:31:21.242868       1 client_config.go:549] Neither --kubeconfig nor --master was specified.  Using the inClusterConfig.  This might not work.
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-10-11
          • 2021-07-18
          • 1970-01-01
          • 1970-01-01
          • 2020-01-06
          • 1970-01-01
          • 2020-10-13
          • 1970-01-01
          相关资源
          最近更新 更多