在AWS路由53中设置多个子域以公开Kubernetes

时间:2018-12-20 23:01:05

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

我很难将流量路由到k8s API和服务。

首先,我创建了一个带有KOPS的私有集群(k8s.buycheese.com) VPC内的拓扑结构,因此只能使用SSH从堡垒访问主节点和节点。

我在namecheap(buycheese.com)中拥有一个域,并在route53中创建了一个托管区域(k8s.buycheese.com)。 KOPS安装群集后,它向托管区域(如api.k8s.buycheese.com)添加了两个记录集。

我已经在namecheap中将托管区域的名称空间添加到了我的域中,以便可以访问Kubernetes集群(kubectl)。可以正常工作!

接下来,我安装了一个入口nginx控制器。然后,我创建了2个入口:

  • 一个公开Kubernetes仪表板的人
  • 另一种公开nodeJS应用程序的

然后我使用入口nginx ELB的URL测试了我的nodeJS应用程序,我可以确认它是否有效!所以我知道我的Pod运行正常,ELB正常工作!

但是显然,我希望通过我拥有的域来访问我的应用程序...

所以基本上:

我需要一个新的子域dashboard.buycheese.com才能进入Kubernetes仪表板。

我需要buycheese.comwww.buycheese.com域才能重定向到我的nodeJS应用。

好吧,为此,我在route53中创建了一个名为buycheese.com的新托管区域,并在namecheap的域buycheese.com中添加了4个新的命名空间。

然后,我在同一托管区域中创建了2个别名(A):

dashboard.buycheese.com与Alias Target:Ingress Nginx的ELB www.buycheese.com与Alias Target:进入Nginx的ELB

然后在我的2个入口文件中

# Dashboard
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
  name: kubernetes-dashboard-oidc
  namespace: kube-system
spec:
  rules:
  - host: dashboard.buycheese.com
    http:
      paths:
      - path: /
        backend:
          serviceName: kubernetes-dashboard-oidc
          servicePort: 80


# NodeJS App
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
  name: app
  namespace:default
spec:
  rules:
  - host: buycheese.com
    http:
      paths:
      - path: /
        backend:
          serviceName: app-service
          servicePort: 3000

总结一下,我有2个托管区域

1)k8s.buycheese.com 2)buycheese.com

托管区域buycheese.com中的2个别名:

1)www.buycheese.com 2)dashboard.buycheese.com

2次入侵以公开仪表板和我的应用

该配置根本不起作用!无法访问以下网址!

  • dashboard.buycheese.com
  • www.buycheese.com
  • buycheese.com

仅ELB的URL有效!

所以首先我想知道我的设置是否正确(显然不是,但是为什么?)

使所有这些URL公开我的服务和应用程序的正确方法是什么?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

我认为唯一可能发生的事情是Alias Target:没有转发到ELB。

您可以尝试使用this post。您始终可以从命令行使用dig进行测试:

$ dig buycheese.com
$ dig www.buycheese.com
$ dig dashboard.buycheese.com

答案 1 :(得分:0)

我在Route 53中使用Type = A创建了新记录集,并为我的ELB DNS名称创建了别名,最初也存在相同的问题,但是在等待一段时间后它开始工作,这可能是denixtry告知的DNS传播问题