如何将我的域的子域与我的 jelastic 环境子域进行别名?
How to alias my domain's subdomain with my jelastic environment subdomain?
我有一个托管在 Jelastic 环境中的 kubernetes 集群 env.jelastic-provider.com
。在那个 k8s 集群中,我在 app.env.jelastic-provider.com
上公开了一个前端应用程序。我想使用 CNAME 记录将我的自定义域 www.example.com
别名为前端子域 app.env.jelastic-provider.com
。我怎样才能做到这一点?我的 DNS 提供商不建议 ANAME 记录。
目前,我在我的 dns 提供商上定义了别名 www.example.com
到 app.env.jelastic-provider.com
的 CNAME 记录。在 Jelastic 方面,我使用 jelastic.environment.Binder.BindExtDomain
api 方法将 www.example.com
绑定到 env.jelastic-provider.com
,这当然不起作用,因为我需要绑定到app.env.jelastic-provider.com
,这似乎是不可能的。
我有没有不涉及的出路:
- 为我的前端服务,例如通过 CDN 而不是我的集群
- 使用 ANAME 记录
?
编辑
根据 Jelastic 和我的 Jelastic 供应商的建议,我取得了一些不错的进展。今天,事实证明尚不支持将外部 IP 附加到 k8s 集群工作节点。它将出现在 jelastic kubernetes jps 的后续版本中。我们可以在该清单中看到大部分配置都在那里,只是 IP 到工作节点的附加没有完成,因为它非常复杂。
因此,根据 this answer from Jelastic,我剩下的唯一解决方案是在我的 k8s 集群前面添加一个 nginx 负载平衡器并为其配置 dns。为此,我需要在该 nginx 实例上配置 SSL,因为如果没有 https,集群将无法正常工作。所以第一步是
- 在集群前面添加nginx节点
- 在 nginx 节点上安装 let's encrypt 插件
- 在我的域提供商面板上配置一个 A 记录,其中我 link 之前使用
www.example.com
加密安装得到的 IPv4 地址
- 当 A 记录有效时,更新 let's encrypt 插件,以便将域考虑在内。
此外,我摆脱了域绑定,因为它们对 A 记录毫无用处。
如果我做了所有这些,那么我可以再次访问一个工作的 k8s 集群。 kubernetes 仪表板和 kubernetes api 正在运行。
然而,不起作用的是对我集群的子域的访问。正如我在原文 post 中所述,我需要访问 app.env.jelastic-provider.com
。这就是我现在被困的地方。我现在如何访问该子域?
使用 CNAME 和 Public IP 是您寻找的唯一出路。
所以,长话短说。在编辑我的初始 post,
中提到的初始配置后
- Add nginx node in front of the cluster
- Install let's encrypt addon on the nginx node
- Configure an A record on my domain provider panel, where I link the IPv4 address resulting from the previous let's encrypt installation with www.example.com
- When the A record is valid, update the let's encrypt addon so that it takes the domain into account.
地址 https://www.example.com
再次返回我的集群,k8s 仪表板和 api 正常工作。然后,
- 在我的域提供商中,我为
app.env.jelastic-provider.com
添加了另一个 A 记录,指向名称为 app
的 nginx load-balancer 的 IPv4
- 在 nginx load-balancer 的 let's encrypt 配置中,我添加了
app.example.com
外部域
- 在
nginx-jelastic.conf
文件中,我添加了
server {
listen *:80;
listen [::]:80;
server_name app.example.com;
location / {
proxy_pass http://app.env.jelastic-provider.com;
}
}
- 在
ssl.conf
中,我添加了
server {
listen 443 ssl;
server_name app.example.com;
ssl_certificate /var/lib/jelastic/SSL/jelastic.chain;
ssl_certificate_key /var/lib/jelastic/SSL/jelastic.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://app.env.jelastic-provider.com;
}
}
当然,上面的 SSL 配置并不完美,必须针对生产目的进行调整。
编辑
我注意到这种处理前端 nginx 的方式有一个缺点 load-balancer。无论您在 load-balancer 中设置什么 headers / 配置,都会以某种方式被集群自己的入口控制器覆盖。如果你这样下去,请确保两个配置保持一致...
我有一个托管在 Jelastic 环境中的 kubernetes 集群 env.jelastic-provider.com
。在那个 k8s 集群中,我在 app.env.jelastic-provider.com
上公开了一个前端应用程序。我想使用 CNAME 记录将我的自定义域 www.example.com
别名为前端子域 app.env.jelastic-provider.com
。我怎样才能做到这一点?我的 DNS 提供商不建议 ANAME 记录。
目前,我在我的 dns 提供商上定义了别名 www.example.com
到 app.env.jelastic-provider.com
的 CNAME 记录。在 Jelastic 方面,我使用 jelastic.environment.Binder.BindExtDomain
api 方法将 www.example.com
绑定到 env.jelastic-provider.com
,这当然不起作用,因为我需要绑定到app.env.jelastic-provider.com
,这似乎是不可能的。
我有没有不涉及的出路:
- 为我的前端服务,例如通过 CDN 而不是我的集群
- 使用 ANAME 记录
?
编辑
根据 Jelastic 和我的 Jelastic 供应商的建议,我取得了一些不错的进展。今天,事实证明尚不支持将外部 IP 附加到 k8s 集群工作节点。它将出现在 jelastic kubernetes jps 的后续版本中。我们可以在该清单中看到大部分配置都在那里,只是 IP 到工作节点的附加没有完成,因为它非常复杂。
因此,根据 this answer from Jelastic,我剩下的唯一解决方案是在我的 k8s 集群前面添加一个 nginx 负载平衡器并为其配置 dns。为此,我需要在该 nginx 实例上配置 SSL,因为如果没有 https,集群将无法正常工作。所以第一步是
- 在集群前面添加nginx节点
- 在 nginx 节点上安装 let's encrypt 插件
- 在我的域提供商面板上配置一个 A 记录,其中我 link 之前使用
www.example.com
加密安装得到的 IPv4 地址
- 当 A 记录有效时,更新 let's encrypt 插件,以便将域考虑在内。
此外,我摆脱了域绑定,因为它们对 A 记录毫无用处。
如果我做了所有这些,那么我可以再次访问一个工作的 k8s 集群。 kubernetes 仪表板和 kubernetes api 正在运行。
然而,不起作用的是对我集群的子域的访问。正如我在原文 post 中所述,我需要访问 app.env.jelastic-provider.com
。这就是我现在被困的地方。我现在如何访问该子域?
使用 CNAME 和 Public IP 是您寻找的唯一出路。
所以,长话短说。在编辑我的初始 post,
中提到的初始配置后
- Add nginx node in front of the cluster
- Install let's encrypt addon on the nginx node
- Configure an A record on my domain provider panel, where I link the IPv4 address resulting from the previous let's encrypt installation with www.example.com
- When the A record is valid, update the let's encrypt addon so that it takes the domain into account.
地址 https://www.example.com
再次返回我的集群,k8s 仪表板和 api 正常工作。然后,
- 在我的域提供商中,我为
app.env.jelastic-provider.com
添加了另一个 A 记录,指向名称为app
的 nginx load-balancer 的 IPv4
- 在 nginx load-balancer 的 let's encrypt 配置中,我添加了
app.example.com
外部域 - 在
nginx-jelastic.conf
文件中,我添加了
server {
listen *:80;
listen [::]:80;
server_name app.example.com;
location / {
proxy_pass http://app.env.jelastic-provider.com;
}
}
- 在
ssl.conf
中,我添加了
server {
listen 443 ssl;
server_name app.example.com;
ssl_certificate /var/lib/jelastic/SSL/jelastic.chain;
ssl_certificate_key /var/lib/jelastic/SSL/jelastic.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://app.env.jelastic-provider.com;
}
}
当然,上面的 SSL 配置并不完美,必须针对生产目的进行调整。
编辑
我注意到这种处理前端 nginx 的方式有一个缺点 load-balancer。无论您在 load-balancer 中设置什么 headers / 配置,都会以某种方式被集群自己的入口控制器覆盖。如果你这样下去,请确保两个配置保持一致...