我正在用AWS实现一个入口控制器,并遵循本教程。
当创建如图所示的入口时,应该给出一个主机名。
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名称。有什么办法吗?我尝试提交主机属性。但是当我在上面提到的教程(第13节(中描述运行的入口时
kubectl describe ing -n echoserver echoserver
上述命令响应中的Address值为空,因此无法命中入口。
更新:
我创建了一个ALB(通过aws UI,并允许将请求转发到默认创建的目标组(,并将其DNS名称设置为ingress yaml文件中的主机名(用简单字母表示(。但我看不出它有效。我遵循上面教程中提到的步骤。
kubectl日志-n kube系统\$(kubectl获取po-n kube系统|\egrp-o alb进入[a-zA-Z0-9-]+(|\egrp-o'\[ALB-INGRESS.*$'
当执行上述日志命令时,仅返回以下输出:
[ALB-INGRESS][controller][INFO]:日志级别读取为",默认为INFO。若要更改,请将LOG_LEVEL环境变量设置为WARN、ERROR或DEBUG。[ALB-INGRESS][controller][INFO]:入口类设置为ALB[ALB-INGRESS][controller][INFO]:albNamePrefix未定义,默认为f0591ff6
根据步骤12,当执行日志命令时,
kubectl日志-n kube系统\$(kubectl获取po-n kube系统|\egrp-o alb进入[a-zA-Z0-9-]+(|\egrp-o'\[ALB-INGGRESS.*$'|\grep'echoserver\/echoserver'
没有任何日志。
此外,当执行以下命令时:
kubectl describe ing-n echoserver echoserver
响应为:
名称:echoserver命名空间:echoserver地址:默认后端:默认http后端:80(172.17.0.4:8080(规则:主机路径后端----------------ingress-alb-3455057285.us-east-2.elb.amazonaws.com/echoserver:80((注释:事件:
你知道哪里出了问题吗
我没有在此处设置任何IAM角色。如果需要,请告诉我该怎么做。
不可能像这样使用入口,入口需要DNS名称,因为它们需要能够路由流量。
你可以通过简单地编辑你的主机文件来解决这个问题:
my_fake_dns <ip_of_alb>
您可能想尝试使用LoadBalancer类型的服务,该服务会自动为您生成ELB(而不是ALB(或NLB。
创建一个执行以下操作的shell脚本非常容易:
-
描述您的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
-
从步骤1输出中筛选LB DNS名称:
ELBv1
jq '.LoadBalancerDescriptions[].DNSName'
ELBv2
jq '.LoadBalancers[].DNSName'
-
将步骤3的结果插入您的入口yaml模板文件
- 将步骤4中得到的YAML文件应用到集群中