如何将我的域的子域与我的 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.comapp.env.jelastic-provider.com 的 CNAME 记录。在 Jelastic 方面,我使用 jelastic.environment.Binder.BindExtDomain api 方法将 www.example.com 绑定到 env.jelastic-provider.com,这当然不起作用,因为我需要绑定到app.env.jelastic-provider.com,这似乎是不可能的。

我有没有不涉及的出路:

?

编辑

根据 Jelastic 和我的 Jelastic 供应商的建议,我取得了一些不错的进展。今天,事实证明尚不支持将外部 IP 附加到 k8s 集群工作节点。它将出现在 jelastic kubernetes jps 的后续版本中。我们可以在该清单中看到大部分配置都在那里,只是 IP 到工作节点的附加没有完成,因为它非常复杂。

因此,根据 this answer from Jelastic,我剩下的唯一解决方案是在我的 k8s 集群前面添加一个 nginx 负载平衡器并为其配置 dns。为此,我需要在该 nginx 实例上配置 SSL,因为如果没有 https,集群将无法正常工作。所以第一步是

  1. 在集群前面添加nginx节点
  2. 在 nginx 节点上安装 let's encrypt 插件
  3. 在我的域提供商面板上配置一个 A 记录,其中我 link 之前使用 www.example.com
  4. 加密安装得到的 IPv4 地址
  5. 当 A 记录有效时,更新 let's encrypt 插件,以便将域考虑在内。

此外,我摆脱了域绑定,因为它们对 A 记录毫无用处。

如果我做了所有这些,那么我可以再次访问一个工作的 k8s 集群。 kubernetes 仪表板和 kubernetes api 正在运行。

然而,不起作用的是对我集群的子域的访问。正如我在原文 post 中所述,我需要访问 app.env.jelastic-provider.com。这就是我现在被困的地方。我现在如何访问该子域?

使用 CNAME 和 Public IP 是您寻找的唯一出路。

Custom Domain Name

Public IP

所以,长话短说。在编辑我的初始 post,

中提到的初始配置后
  1. Add nginx node in front of the cluster
  2. Install let's encrypt addon on the nginx node
  3. 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
  4. 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 正常工作。然后,

  1. 在我的域提供商中,我为 app.env.jelastic-provider.com 添加了另一个 A 记录,指向名称为 app
  2. 的 nginx load-balancer 的 IPv4
  3. 在 nginx load-balancer 的 let's encrypt 配置中,我添加了 app.example.com 外部域
  4. nginx-jelastic.conf 文件中,我添加了
server {
    listen *:80;
    listen [::]:80;
    server_name  app.example.com;

    location / {
            proxy_pass http://app.env.jelastic-provider.com;
    }
}
  1. 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 / 配置,都会以某种方式被集群自己的入口控制器覆盖。如果你这样下去,请确保两个配置保持一致...