发布于 2026-01-06 1 阅读
0

在您自己的自定义域名上公开 Kubernetes 服务 您需要什么? 从外部访问 Kubernetes 将您的域名指向集群 测试一下!

在您自己的自定义域名上公开 Kubernetes 服务

你需要什么?

从外部访问 Kubernetes

将您的域指向集群

试试看!

你终于将应用部署到了 Kubernetes,并且买了一个很棒的域名——有没有想过如何将你这个像www.mydomain.com这样酷炫的域名指向运行在 Kubernetes 中的应用呢?那就继续往下读,我将尝试解释如何做到这一点!

你需要什么?

开始之前,请确保您已准备好以下物品:

  • Kubernetes 集群及其访问权限(即您可以部署内容)
  • 您的应用*正在 Kubernetes 集群中运行
  • 已注册域名(我使用的是Name.com注册域名,但其他任何注册商也可以)

注意:我使用“ app”一词来指代运行在集群中的代码,您希望通过域名访问它。您的代码运行在 Docker 镜像和 Kubernetes Pod 中,而该 Pod 又是部署的一部分,并通过 Kubernetes 服务对外暴露。但我将使用“app”来指代所有这些。

以下是将域名与您的服务连接的大致步骤:

  • 创建 Ingress 资源
  • 部署 Ingress 控制器
  • 更新域记录,使其指向集群

从外部访问 Kubernetes

Kubernetes 中的Ingress资源用于管理对集群内运行的应用程序的外部访问。通过 Ingress,您可以定义规则,告诉 Kubernetes 如何将外部流量路由到您的应用程序。以下是一个 Ingress 资源的示例:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
     kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: www.mycoolapp.mydomain.com
    http:
      paths:
      - path: /
        backend:
          serviceName: mycoolapp
          servicePort: 80
Enter fullscreen mode Exit fullscreen mode

然而,仅仅有了这个资源还不够——你还需要一个能够引导流量的控制器。我将使用 NGINX Ingress Controller,但你也可以使用其他控制器(更多文档请参见此处)。我们将使用Helm来部署 nginx-ingress chart,如下所示:

helm install stable/nginx-ingress
Enter fullscreen mode Exit fullscreen mode

上述命令会负责安装 NGINX 控制器和默认后端。默认后端是一个“应用”,默认情况下,入口会指向该应用,或者在没有定义任何服务的情况下也会指向该应用。作为 NGINX 控制器的一部分,您还会获得一个类型为 LoadBalancer 的服务——您需要将域名指向该服务。

请注意,在部署控制器时,您可以调整和旋转大量的按钮和旋钮——这里有一个完整的列表。

NGINX入口控制器部署完毕后,让我们运行以下命令来确定集群的IP地址:

kubectl get services --all-namespaces
Enter fullscreen mode Exit fullscreen mode

上述命令将列出所有命名空间中运行的 Kubernetes 服务。您需要查找的是类型为LoadBalancer的服务以及设置了外部 IP地址的服务(通常是同一个服务)。以下是该命令的示例输出:

virtuous-gopher 是 Helm 为 NGINX 控制器选择的名称。

*nginx-ingress-controller上图中服务旁边灰色显示的值就是你需要的。这是你要将域名指向的 IP 地址。

或者,如果您想更进一步,还可以运行以下命令,该命令将按服务类型(负载均衡器)筛选所有服务,并返回服务名称和 IP 地址:

kubectl get svc --all-namespaces -o jsonpath='{range .items[?(@.spec.type=="LoadBalancer")]}{.metadata.name}:{.status.loadBalancer.ingress[0].ip}{"\n"}{end}'
Enter fullscreen mode Exit fullscreen mode

将您的域指向集群

根据您注册域名的位置,步骤可能会略有不同,但要点相同——您需要创建 `<domain>`A和 ` CNAME DNS<host>` 记录,将您的域名(主机)指向集群。

我的域名注册商是Name.com,但我很确定其他域名注册商也有一些关于如何操作的优秀文档。

我的域名 DNS 记录的详细视图(已大量删减)

我的操作步骤如下:在 Name.com 上,我进入我的域名,打开 DNS 记录选项卡。在那里,我添加了一条 A 记录,主机名为 `<hostname>` www.mycoolapp.mydomain.com,应答中我输入了我的集群 IP 地址。

同样,我创建了一条CNAME记录并指向mycoolapp.mydomain.com集群主机名(通常可以在云服务提供商的设置中找到)。您无需提供 `<hostname>` CNAME,一条A记录就足够了。请注意,如果您不提供 `<hostname>` CNAME,则mycoolapp.mydomain.com无法解析到您的应用程序!

试试看!

启动你最喜欢的终端或浏览器,然后访问mycoolapp.mydomain.com. 瞧!你应该能够收到响应(就我而言,我部署的应用程序是一个简单的 NGINX 容器,因此显示的是 NGINX 的默认页面)。

是的,我拥有 containers.social 域名……还有一大堆我永远不会用的域名。

文章来源:https://dev.to/peterj/expose-a-kubernetes-service-on-your-own-custom-domain-52dd