首页 > 解决方案 > 在 aws route 53 中设置多个子域以暴露 Kubernetes

问题描述

我在将流量路由到 k8s API 和服务时遇到了很大的困难。

首先,我创建了一个集群(k8s.buycheese.com),在私有拓扑中使用 KOPS,在 VPC 中,这样,主节点和节点只能从使用 SSH 的堡垒访问。

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

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

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

然后我使用入口 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.comwith Alias Target: ingress nginx 的 ELB www.buycheese.comwith Alias Target: ingress 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

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

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

2 Ingresses 暴露仪表板和我的应用程序

那个配置根本不行!以下网址无法访问!

只有 ELB 的 URL 有效!

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

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

谢谢你的帮助!

标签: amazon-web-serviceskubernetesamazon-route53kubernetes-ingress

解决方案


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

您可以尝试改用CNAME 记录。您始终可以dig从命令行使用:

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

推荐阅读