我尝试在EKS上部署,我的配置。Yaml遵循以下建议的格式:
botfront:
app:
# The complete external host of the Botfront application (eg. botfront.yoursite.com). It must be set even if running on a private or local DNS (it populates the ROOT_URL).
host: botfront.yoursite.com
mongodb:
enabled: true # disable to use an external mongoDB host
# Username of the MongoDB user that will have read-write access to the Botfront database. This is not the root user
mongodbUsername: username
# Password of the MongoDB user that will have read-write access to the Botfront database. This is not the root user
mongodbPassword: password
# MongoDB root password
mongodbRootPassword: rootpassword
然后我运行这个命令:
helm install -f config.yaml -n botfront --namespace botfront botfront/botfront
显示部署成功,所有pod都在运行。
但是botfront.yoursite.com没有任何进展。我检查了入口,匹配了,但没有外部ip地址之类的。我不知道部署到kubernetes后如何访问我的后台站点。
我错过了什么?
编辑:
与nginx lb安装kubectl get ingresses -n botfront
现在返回:
NAME CLASS HOSTS ADDRESS PORTS AGE
botfront-app-ingress <none> botfront.cream.com a182b0b24e4fb4a0f8bd6300b440e5fa-423aebd224ce20ac.elb.us-east-2.amazonaws.com 80 4d1h
和
kubectl get svc -n botfront
返回:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
botfront-api-service NodePort 10.100.207.27 <none> 80:31723/TCP 4d1h
botfront-app-service NodePort 10.100.26.173 <none> 80:30873/TCP 4d1h
botfront-duckling-service NodePort 10.100.75.248 <none> 80:31989/TCP 4d1h
botfront-mongodb-service NodePort 10.100.155.11 <none> 27017:30358/TCP 4d1h
如果运行kubectl get svc -n botfront
,它将显示所有暴露botfront
的Services
$ kubectl get svc -n botfront
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
botfront-api-service NodePort 10.3.252.32 <none> 80:32077/TCP 63s
botfront-app-service NodePort 10.3.249.247 <none> 80:31201/TCP 63s
botfront-duckling-service NodePort 10.3.248.75 <none> 80:31209/TCP 63s
botfront-mongodb-service NodePort 10.3.252.26 <none> 27017:31939/TCP 64s
它们中的每一个都是NodePort
类型,这意味着它将您的应用程序暴露在每个EKS的外部IP地址上
在指定端口上集群节点。如果你输入node1ip恰好是1.2.3.4
,你可以在1.2.3.4:32077
上访问botfront-api-service
。不要忘记在防火墙/安全组上允许访问这个端口。如果您有任何已注册域名,例如yoursite.com
,您可以为其配置子域名botfront.yoursite.com
,并将其指向您的一个EKS节点。然后你就可以用你的域名访问它了。这是最简单的方法。
为了能够以比使用特定节点的IP和非标准端口更有效的方式访问它,您可能希望通过Ingress
公开它,这将创建一个外部负载平衡器,使您的NodePort
服务在一个外部IP地址和标准http端口下可用。
更新:我看到这个图表已经与ingress
一起暴露了你的应用程序:
$ kubectl get ingresses -n botfront
NAME HOSTS ADDRESS PORTS AGE
botfront-app-ingress botfront.yoursite.com 80 70m
如果通过以下方式检索其yaml定义:
$ kubectl get ingresses -n botfront -o yaml
你会看到它使用了以下注释:
kubernetes.io/ingress.class: nginx
这意味着你需要在你的EKS上安装nginx-ingress控制器集群。这可能是它失败的原因之一。正如您在我的示例中看到的,这个入口没有获得任何外部IP。这是因为nginx-ingress没有安装在我的GKE集群。不确定EKS但据我所知,它没有附带nginx-ingress预装.
还有一件事:我假设在你的config.yaml
中你放了一些你已经注册的真实域名而不是botfront.yoursite.com
。假设您的域是yoursite.com
,并且您成功地创建了子域botfront.yoursite.com
,您应该将其重定向到负载均衡器的IP (ingress
使用的IP)。
如果你运行kubectl get ingresses -n botfront
,但ADDRESS
是空的,你可能没有nginx-ingress已安装且无法创建底层负载平衡器。如果您在这里有一些外部IP地址,那么将您的注册域名重定向到此地址。