通过使用kops创建的AWS群集上的入口使k8s服务可用

时间:2017-07-24 11:26:46

标签: amazon-web-services kubernetes traefik kops

在使用kubeadm的几个KVM上尝试kubernetes之后,我想在AWS上使用kops设置一个适当的自动扩展群集,并为其提供一些网站。

kops create cluster ...的令人兴奋的魔力给了我一堆ec2实例,让{8}的k8s API可用,甚至可以配置我的本地test-cluster.example.com以便~/.kube/config }} 马上。这太棒了!

我可以将部署发送到群集并配置入口规则 - 所有这些内容都可以在仪表板中看到。但是,目前还不是很清楚如何将我的群集中的节点与我所拥有的域名相关联。

在我的小型KVM k8中,我只需安装traefik并在端口kubectl apply -f any-stuff.yaml:80上公开它。然后我转到我的DNS设置并添加一些A记录,这些记录指向我的群集节点的公共IP。在AWS中,存在一组动态VM,其中一些可能在群集未处于高负载时发生故障。所以感觉我需要使用外部负载均衡器,因为我的traefik helm chart服务暴露了两个随机端口而不是固定:80和:443,但我不确定。

有哪些选择?他们的费用是多少?如果域不受AWS控制,应该怎样转到DNS记录?

2 个答案:

答案 0 :(得分:2)

将您的服务配置为LoadBalancer服务不足以让您的群集设置实际的负载均衡器,您需要一个像上面那样运行的入口控制器。

你应该添加kops nginx ingress addon:https://github.com/kubernetes/kops/tree/master/addons/ingress-nginx

在这种情况下,AWS上的nginx入口控制器将找到入口并为其创建AWS ELB。我不确定成本,但值得。

您还可以考虑可以针对节点的公共ips和节点端口访问的节点端口(确保向您的安全组添加规​​则)

您还可以考虑支持Http / 2和websockets的新AWS ELB v2或ALB。您可以使用alb-ingress-controller https://github.com/coreos/alb-ingress-controller进行此操作。

最后,如果您想要SSL(您应该)考虑kube-lego项目,该项目将自动为您获取SSL证书。 https://github.com/jetstack/kube-lego

答案 1 :(得分:1)

在我的情况下,我使用了nginx-ingress-controller。我认为与traefik的设置是一样的。

1)将traefik服务类型设置为loadBalancer。

Kubernetes将添加ELB规则。

2)将Route53中的CNAME或ALIAS设置为ELB主机名。

您可以使用https://github.com/kubernetes-incubator/external-dns与Route53同步公开的服务和入口。