本教程演示如何使用 Google Kubernetes Engine (GKE) 通过静态外部 IP 地址将您的 Web 应用程序公开到 Internet 并配置域名以指向您的应用程序 本教程假设您拥有一个注册域名,例如 例子.com 你可以通过谷歌注册一个域名 您的域名或其他域名注册商 如果您没有,请选择 ## 目标 本教程演示了以下步骤: ## 费用 本教程使用 Google Cloud 的以下收费组件: 要根据您的预计使用情况生成成本估算, 使用定价计算器 完成本教程后,您可以通过删除您创建的资源来避免继续计费。有关详细信息,请参阅清理 ## 开始之前按照以下步骤启用 Kubernetes Engine API: - 访问 Google Cloud 控制台中的 Kubernetes Engine 页面 - 创建或选择一个项目 - 等待 API 和相关服务被启用。这可能需要几分钟 - 确保为您的 Cloud 项目启用了计费。了解如何检查项目是否启用了计费 安装本教程中使用的以下命令行工具: - gcloudis 用于创建和删除 Kubernetes Engine 集群 gcloudis 包含在 gcloud命令行界面 - kubectlis 用于管理 Kubernetes,Kubernetes Engine 使用的集群编排系统。你可以安装 kubectlusing 云: gcloud 组件安装 kubectl 从 GitHub 克隆示例代码: git 克隆 httpsgithub.com/GoogleCloudPlatform/kubernetes-engine-samples cd kubernetes-engine-samples/hello-app/manifests 设置默认值 为了节省输入项目 ID 的时间 和 Compute Engine 区域选项 gcloud 命令行工具 gcloud命令行工具,可以设置默认值: gcloud 配置集项目 项目-idgcloud 配置集计算/区域计算区域 创建集群 创建一个名为 域测试以部署您的 Web 应用程序: gcloud 容器集群创建域测试 ## 部署您的 Web 应用程序 以下清单描述了运行示例 Web 应用程序容器映像的 Deployment: # 版权所有 2021 Google LLC # # 根据 Apache 许可证 2.0 版获得许可(“许可证 # 除非遵守许可证,否则您不得使用此文件。 # 您可以在 # # httpwww.apache.org 获取许可证副本/licenses/LICENSE-2.0 # # 除非适用法律要求或书面同意,否则根据许可分发的软件 # 是在“按原样”的基础上分发的, # 没有任何明示或暗示的保证或条件。 #有关特定语言的管理权限和许可证下的#限制,请参阅许可证。apiVersion:apps / v1 kind:部署元数据:名称:helloweb标签:app:hello spec:selector:matchLabels:app:hello tier:web模板:metadata:标签:应用程序:你好层:网络规范:容器:-名称:你好应用程序图像:us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0端口:-容器端口:8080资源:请求:中央处理器:200米 运行以下命令来创建 Deployment: kubectl apply -f helloweb-deployment.yaml ## 暴露你的应用 您可以使用以下任一方法在 GKE 上公开您的应用程序: 使用一个服务,它创建一个使用区域 IP 地址的 TCP 网络负载平衡器。使用 Ingress,创建 HTTP(S) 负载均衡器并支持全球 IP 地址 要详细了解每种方法的优缺点,请参阅使用 Ingress 设置 HTTP(S) 负载平衡 使用服务 为确保您的应用程序具有静态公共 IP 地址,您必须预留一个静态 IP 地址 如果您选择使用服务公开您的应用程序,则必须创建区域 IP 地址。全局 IP 地址仅适用于 Ingress 资源类型,如下一节所述 要使用服务,请创建一个名为 helloweb-ip 在 地区 us-central1: 云端 gcloud 计算地址创建 helloweb-ip --region us-central1 要查找您创建的静态 IP 地址,请运行以下命令: gcloud 计算地址描述 helloweb-ip --region us-central1 输出: 地址:203.0.113.32.. 配置连接器 **注意此步骤需要 配置连接器。跟着 安装说明 在集群上安装 Config Connector apiVersion: compute.cnrm.cloud.google.com/v1beta1 kind: ComputeAddress metadata: name: helloweb-ip spec: location: us-central1 kubectl apply -f compute-address-regional.yaml 要查找静态 IP 地址,请运行以下命令: kubectl get computeaddress helloweb-ip -o jsonpathspec.address}'以下清单描述了一个 LoadBalancer 类型的服务,它创建一个网络负载均衡器以公开具有公共 IP 的 Pod 代替 带有静态 IP 地址的“YOUR.IP.ADDRESS.HERE”: # Copyright 2021 Google LLC # # 根据 Apache 许可证 2.0 版获得许可(“许可证 # 除非遵守许可证,否则您不得使用此文件。# 您可以在 # # httpwww.apache.org 获取许可证副本/licenses/LICENSE-2.0 # # 除非适用法律要求或书面同意,否则根据许可证分发的软件 # 是在“按原样”的基础上分发的, # 没有任何明示或暗示的保证或条件。 #有关特定语言的管理权限和许可证下的#限制,请参阅许可证。apiVersion: v1 kind: Service metadata: name: helloweb labels: app: hello spec: selector: app: hello tier: web ports: - port: 80 targetPort: 8080 类型:LoadBalancer loadBalancerIP:“YOUR.IP.ADDRESS.HERE” 然后,创建服务: kubectl apply -f helloweb-service-static-ip.yaml 要查看与负载均衡器关联的保留 IP 地址: kubectl 获取服务输出: 名称 集群 IP 外部 IP 端口 AGE helloweb 10.31.254.176 203.0.113.32 80:30690/TCP 54s 使用入口 如果您选择使用创建 HTTP(S) 负载均衡器的 Ingress 公开您的应用程序,则必须保留一个全局静态 IP 地址。区域 IP 地址不适用于 Ingress 要了解有关如何使用 Ingress 将应用程序公开到 Internet 的更多信息,请参阅使用 Ingress 设置 HTTP(S) 负载平衡教程 创建一个名为的全局静态 IP 地址 你好网络IP: 云端 gcloud 计算地址创建 helloweb-ip --global 要查找您创建的静态 IP 地址: gcloud 计算地址描述 helloweb-ip --globalOutput: 地址:203.0.113.32.. 配置连接器 **注意此步骤需要 配置连接器。跟着 安装说明 在集群上安装 Config Connector apiVersion: compute.cnrm.cloud.google.com/v1beta1 kind: ComputeAddress metadata: name: helloweb-ip spec: location: global kubectl apply -f 计算地址-global.yaml 以下清单描述了一个 Ingress,它是一个静态 IP 上的 Web 应用程序,具有两个资源: - 一种 服务与 类型:节点端口 - 一个 使用服务名称和静态 IP 注释配置的入口 # Copyright 2021 Google LLC # # 根据 Apache 许可证 2.0 版获得许可(“许可证 # 除非遵守许可证,否则您不得使用此文件。# 您可以在 # # httpwww.apache.org 获取许可证副本/licenses/LICENSE-2.0 # # 除非适用法律要求或书面同意,否则根据许可证分发的软件 # 是在“按原样”的基础上分发的, # 没有任何明示或暗示的保证或条件。 #请参阅许可证以了解许可证下的特定语言管理权限和#limitations。apiVersion:networking.k8s.io/v1 kind:Ingress metadata:name:helloweb annotations:kubernetes.io/ingress.global-static-ip-name:helloweb -ip 标签:应用程序:你好规范:默认后端:服务:名称:helloweb 后端端口:编号:8080apiVersion:v1 种类:服务元数据:名称:helloweb 后端标签:应用程序:你好规范:类型:NodePort 选择器:应用程序:你好层:Web 端口:- 端口:8080 目标端口:8080 这 kubernetes.io/ingress.global-static-ip-name 注解指定名称 与 HTTP(S) 负载关联的全球 IP 地址资源 平衡器 将资源应用到集群: kubectl apply -f helloweb-ingress-static-ip.yaml输出: 入口“helloweb”已创建服务“helloweb-backend”已创建 要查看与负载均衡器关联的保留 IP 地址: kubectl 获取入口输出: 名称 主机地址 PORTS AGE helloweb * 203.0.113.32 80 4m ## 访问你预留的静态IP地址 要验证负载均衡器配置是否正确,您可以使用 网络浏览器访问IP地址或使用 卷曲: 卷曲 http203.0.113.32/输出: 你好世界!主机名:helloweb-3766687455-8lvqv ## 配置您的域名记录 让浏览器查询您的域名,例如 example.com 或子域 名称,例如 blog.example.com,指向你预留的静态IP地址, 您必须更新域名的 DNS(域名服务器)记录 您必须创建一个 您的域或子域的 **A**(地址)类型 DNS 记录 名称并使用保留的 IP 地址配置其值 您域的 DNS 记录由您的名称服务器管理。您的名称服务器可能是您注册域的“注册商”、Cloud DNS 等 DNS 服务或其他第三方提供商 如果您的域名服务器是 Cloud DNS:按照 Cloud DNS 快速入门指南使用应用程序的保留 IP 地址为您的域名配置 DNS A 记录。如果您的名称服务器是另一个提供商:请参阅您的 DNS 服务的文档,了解如何设置 DNS A 记录来配置您的域名。如果您选择改用 Cloud DNS,请参阅迁移到 Cloud DNS ## 访问你的域名 要验证您域名的 DNS A 记录是否解析为您保留的 IP 地址,请访问您的域名 要对您域名的 A 记录进行 DNS 查询,请运行 主持人 命令: 主机 example.com 输出: example.com 的地址为 203.0.113.32 此时,您可以将网络浏览器指向您的域名并访问您的网站! ## 清理 为避免您的 Google Cloud 帐户因本教程中使用的资源而产生费用,请删除包含资源的项目,或保留项目并删除单个资源 删除负载均衡资源: kubectl delete ingress,service -l app=你好 释放保留的静态IP。删除负载均衡器后,未使用但保留的IP地址不再免费,并按未使用的IP地址计费。执行以下命令释放静态IP资源: 如果您使用服务: gcloud 计算地址删除 helloweb-ip --region us-central1 如果您使用 Ingress: gcloud 计算地址删除 helloweb-ip --global - 删除示例应用程序: kubectl delete -f helloweb-deployment.yaml 通过观察以下命令的输出,等待负载均衡器被删除。输出不应显示名称中包含“helloweb”的转发规则: gcloud 计算转发规则列表 删除容器集群: gcloud 容器集群删除域测试 ## 下一步是什么 通过 Google Domains 注册您自己的域名 探索其他 Kubernetes Engine 教程 探索有关 Google Cloud 的参考架构、图表、教程和最佳做法。查看我们的云架构中心。