为aws-alb-ingress-controller设置ALB的DNS名称

时间:2018-07-18 11:25:53

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

我正在使用AWS实现入口控制器,并遵循this教程。

在创建here所示的入口时,应提供主机名。

spec:
  rules:
  - host: echoserver.example.com #How to let kubernate assign ALB's DNS name and not give our own DNS name.
    http:
      paths:
      - path: /
        backend:
          serviceName: echoserver
          servicePort: 80

但是我想给ALB生成的DNS名称,因为我没有自己的DNS名称。有什么办法吗?我尝试省略 host 属性。但是当我按照上面提到的教程(第13节)中描述的入口描述运行

 kubectl describe ing -n echoserver echoserver  

以上命令的响应中的Address值为空,因此无法访问入口。

更新

我创建了一个ALB(通过aws UI,并允许将请求转发到默认创建的目标组),并将其DNS名称设置为入口yaml文件中的主机名(用简单字母表示)。但我看不到它起作用。我遵循以上above tutorial中提到的步骤。

kubectl logs -n kube-system \
    $(kubectl get po -n kube-system | \
    egrep -o alb-ingress[a-zA-Z0-9-]+) | \
    egrep -o '\[ALB-INGRESS.*$'

执行上述log命令时,仅返回以下输出:

[ALB-INGRESS] [controller] [INFO]: Log level read as "", defaulting to INFO. To change, set LOG_LEVEL environment variable to WARN, ERROR, or DEBUG.
[ALB-INGRESS] [controller] [INFO]: Ingress class set to alb
[ALB-INGRESS] [controller] [INFO]: albNamePrefix undefined, defaulting to f0591ff6

按照步骤12,当执行log命令时,

kubectl logs -n kube-system \
    $(kubectl get po -n kube-system | \
    egrep -o alb-ingress[a-zA-Z0-9-]+) | \
    egrep -o '\[ALB-INGRESS.*$' | \
    grep 'echoserver\/echoserver'

没有任何日志。

此外,在执行以下命令时:
kubectl描述ing -n echoserver echoserver
响应为:

Name:             echoserver
Namespace:        echoserver
Address:
Default backend:  default-http-backend:80 (172.17.0.4:8080)
Rules:
  Host                                                Path  Backends
  ----                                                ----  --------
  ingress-alb-3455057285.us-east-2.elb.amazonaws.com
                                                      /   echoserver:80 ()
Annotations:
Events:  

有什么想法请问哪里出错了?
我在这里没有设置任何IAM角色。如果需要,请告诉我该怎么做。

2 个答案:

答案 0 :(得分:1)

不可能使用这样的入口,入口需要一个DNS名称,因为它们需要能够路由流量。

您可以通过简单地编辑主机文件来解决此问题:

my_fake_dns <ip_of_alb>

您可能想尝试使用Service of type LoadBalancer,它会自动为您生成ELB(不是ALB)或NLB

答案 1 :(得分:1)

创建执行以下操作的shell脚本将非常容易:

  1. 描述您的AWS负载均衡器

    ELBv1

    aws elb describe-load-balancers --load-balancer-name my-load-balancer
    

    ELBv2

    aws elbv2 describe-load-balancers --load-balancer-arns arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188
    
  2. 从步骤1的输出中过滤LB DNS名称:

    ELBv1

    jq '.LoadBalancerDescriptions[].DNSName'
    

    ELBv2

    jq '.LoadBalancers[].DNSName'
    
  3. 将第3步的结果插入到您的入口Yaml模板文件中

  4. 将步骤4中生成的YAML文件应用于您的集群。