amazon-web-services - 在 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 个入口:
- 一个公开 Kubernetes 仪表板
- 另一个暴露 nodeJS 应用程序的方法
然后我使用入口 nginx ELB 的 URL 测试了我的 nodeJS 应用程序,我可以确认它有效!所以我知道我的 pod 运行正常并且 ELB 工作正常!
但显然,我希望通过我拥有的域访问我的应用程序......
所以基本上:
我需要一个新的子域dashboard.buycheese.com
才能访问 Kubernetes 仪表板。
我需要buycheese.com
和www.buycheese.com
域重定向到我的 nodeJS 应用程序。
好吧,为此,我在 route53 中创建了一个名为 buycheese.com 的新托管区域,并在 namecheap 中向我的域 buycheese.com 添加了 4 个新命名空间。
然后我在同一个托管区域内创建了 2 个别名(A):
dashboard.buycheese.com
with Alias Target: ingress nginx 的 ELB
www.buycheese.com
with 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 暴露仪表板和我的应用程序
那个配置根本不行!以下网址无法访问!
dashboard.buycheese.com
www.buycheese.com
buycheese.com
只有 ELB 的 URL 有效!
所以首先我想知道我的设置是否正确(显然不是,但为什么?)
使所有这些 URL 暴露我的服务和应用程序的正确方法是什么?
谢谢你的帮助!
解决方案
我认为这里可能发生的唯一事情Alias Target:
是没有转发到 ELB。
您可以尝试改用CNAME 记录。您始终可以dig
从命令行使用:
$ dig buycheese.com
$ dig www.buycheese.com
$ dig dashboard.buycheese.com
推荐阅读
- sql - 遇到除以零错误 - 使用数值和 DATEDIFF
- docker - 使用 docker network (ssh) 在不同机器上运行的两个 docker 容器之间进行通信
- azure - 如何将存储在 Azure 表或 Event Hub 中的指标暴露给 prometheus?
- javascript - 如何检查 div 是否为空?
- sql - ORACLE DB 查询中分号的 Regexp_Substr
- java - 比较作为文件名一部分的两个文件之间的时间
- c# - 使用 AddClaims 将 int 数组存储到声明中
- powerbi - 显示没有访问令牌的 Power BI 报表?
- java - JPA JTA - 在同一个实体对象(同一个实体 ID 属性)上使用 EntityManager.persist() 和 EntityManager.remove()
- angular - 如何在全局配置文件中为 ngx-logger 配置记录器级别