本教程演示如何使用 Google Kubernetes Engine (GKE) 在静态外部 IP 地址上将 Web 应用公开给互联网,并将域名配置为指向该应用。
本教程假设您拥有已注册的域名(例如 example.com
)。
部署您的 Web 应用
以下清单描述了一个运行示例 Web 应用容器映像的 Deployment:
创建 Deployment:
kubectl apply -f helloweb-deployment.yaml
公开您的应用
您可以使用以下任一方法在 GKE 上公开您的应用:
使用 Service,这会创建一个使用区域级 IP 地址的外部直通式网络负载均衡器。
使用 Ingress,这会创建一个应用负载均衡器并支持全球 IP 地址。
如需详细了解每种方法的优缺点,请参阅使用 Ingress 设置外部应用负载均衡器。
使用 Service
如需确保您的应用具有静态外部 IP 地址,您必须预留静态 IP 地址。
如果您选择使用 Service 公开应用,则必须创建区域级 IP 地址。全球 IP 地址仅适用于 Ingress 资源类型,如下一个部分中所述。
如需使用 Service,请在地区 us-central1
中创建名为 helloweb-ip
的静态 IP 地址:
gcloud
gcloud compute addresses create helloweb-ip --region us-central1
找到您创建的静态 IP 地址:
gcloud compute addresses describe helloweb-ip --region us-central1
输出类似于以下内容:
...
address: 203.0.113.32
...
Config Connector
注意:此步骤需要使用 Config Connector。按照安装说明在您的集群上安装配置连接器。
将此清单保存为 compute-address-regional.yaml
。
将清单应用到您的集群:
kubectl apply -f compute-address-regional.yaml
找到您创建的静态 IP 地址:
kubectl get computeaddress helloweb-ip -o jsonpath='{.spec.address}'
以下清单描述了类型为 LoadBalancer 的 Service,它会创建外部直通式网络负载均衡器以使用外部 IP 地址公开 Pod。
将 YOUR.IP.ADDRESS.HERE
替换为静态 IP 地址:
创建 Service:
kubectl apply -f helloweb-service-static-ip.yaml
查看与负载均衡器关联的预留 IP 地址:
kubectl get service
输出类似于以下内容:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
helloweb 10.31.254.176 203.0.113.32 80:30690/TCP 54s
使用 Ingress
如果您选择使用 Ingress 公开应用,则必须预留全球静态 IP 地址。使用注解 kubernetes.io/ingress.global-static-ip-name
指定全局 IP 地址。
如需将应用公开给区域内的客户端和服务,请在为 GKE 部署内部 Ingress 资源以及所需注解时使用区域级静态内部 IP 地址。
如需了解如何使用 Ingress 将应用公开给互联网,请参阅使用 Ingress 设置外部应用负载均衡器。
如需创建名为 helloweb-ip
的全局静态 IP 地址,请运行以下命令:
gcloud
gcloud compute addresses create helloweb-ip --global
找到您创建的静态 IP 地址:
gcloud compute addresses describe helloweb-ip --global
输出类似于以下内容:
...
address: 203.0.113.32
...
Config Connector
注意:此步骤需要使用 Config Connector。按照安装说明在您的集群上安装配置连接器。
将此清单保存为 compute-address-global.yaml
。
将清单应用到您的集群:
kubectl apply -f compute-address-global.yaml
以下清单描述了使用两个资源在静态 IP 上公开 Web 应用的 Ingress:
- 类型为
type:NodePort
的Service
- 使用服务名称和静态 IP 注释配置的
Ingress
kubernetes.io/ingress.global-static-ip-name
注解用于指定要与负载均衡器关联的全球 IP 地址资源的名称。
将清单应用到您的集群:
kubectl apply -f helloweb-ingress-static-ip.yaml
查看与负载均衡器关联的 IP 地址:
kubectl get ingress
输出类似于以下内容
NAME HOSTS ADDRESS PORTS AGE
helloweb * 203.0.113.32 80 4m
查看预留的静态 IP 地址
如需验证是否正确配置了负载均衡器,您可以使用网络浏览器访问 IP 地址或使用 curl
:
curl http://203.0.113.32/
输出类似于以下内容:
Hello, world!
Hostname: helloweb-3766687455-8lvqv
配置域名记录
如需让查询您的域名(例如 example.com
)或子域名(例如 blog.example.com
)的浏览器指向您预留的静态 IP 地址,您必须更新域名的 DNS(域名服务器)记录。
您必须为您的域名或子域名创建 A(地址)类型的 DNS 记录,并使用预留的 IP 地址配置其值。
域名的 DNS 记录由域名服务器管理。域名服务器可能是您注册域名的“注册商”、DNS 服务(如 Cloud DNS)或其他第三方提供商。
如果您的域名服务器是 Cloud DNS:请按照 Cloud DNS 快速入门指南操作,使用应用的预留 IP 地址为您的域名配置 DNS A 记录。
如果域名服务器是其他提供商:请参阅 DNS 提供商文档,了解如何设置 DNS A 记录来配置您的域名。如果您选择改用 Cloud DNS,请参阅迁移到 Cloud DNS。
访问您的域名
要验证域名的 DNS A 记录是否解析为您预留的 IP 地址,请访问您的域名。
如需对域名的 A 记录进行 DNS 查询,请运行 host
命令:
host example.com
输出类似于以下内容:
example.com has address 203.0.113.32
现在,您可以将网络浏览器指向您的域名并访问您的网站。