Kubernetes 服务是一个抽象概念,可用于将一组 pod 公开为单个实体。服务是公开和管理 Kubernetes 集群中容器化应用的组成要素。此蓝图中的服务架构采用标准化设计,并考虑了命名空间、身份、服务的公开和服务间通信。
命名空间
每个命名空间都有自己的一组资源,例如 Pod、服务和部署。通过命名空间,您可以整理应用并将其彼此隔离。此蓝图使用命名空间按用途对服务进行分组。例如,您可以为所有前端服务创建一个命名空间,然后为后端服务创建一个命名空间。这种分组可让您更轻松地管理服务并控制对其的访问。
服务的公开
服务通过 GKE Gateway Controller 在互联网上公开。GKE Gateway Controller 使用多集群、多区域配置中的 Cloud Load Balancing 创建负载均衡器。Cloud Load Balancing 使用 Google 的网络基础设施为服务提供任播 IP 地址,以实现对服务的低延时访问。客户端对服务的访问是通过 HTTPS 连接完成的,客户端 HTTP 请求会重定向到 HTTPS。负载均衡器使用 Certificate Manager 来管理公共证书。服务进一步受到 Cloud Armour 和 Cloud CDN 的保护。下图展示了服务在互联网中的公开方式。
Cloud Service Mesh
此蓝图使用 Cloud Service Mesh 对服务之间的所有通信进行双向身份验证和授权。对于此部署,Cloud Service Mesh 使用 CA Service 颁发 TLS 证书,以对对等方进行身份验证并帮助确保只有获得授权的客户端可以访问服务。使用双向 TLS (mTLS) 进行身份验证也有助于确保服务之间的所有 TCP 通信在传输过程中都经过加密。对于进入服务网格的服务入站流量,蓝图使用 GKE Gateway Controller。
分布式服务
分布式服务是指在多个集群内的同一命名空间中运行的 Kubernetes 服务的抽象概念。即使一个或多个 GKE 集群不可用,只要任何剩余的运行状况良好的集群能够传送负载,分布式服务就仍然可用。为了跨集群创建分布式服务,Cloud Service Mesh 会在环境中所有集群上的应用服务之间提供第 4 层和第 7 层连接。这种连接可让多个集群上的 Kubernetes 服务充当一个逻辑服务。仅当由于区域故障而无法处理区域内流量,集群间的流量才会路由到其他区域。
服务身份
在 GKE 上运行的服务具有与之关联的身份。此蓝图会将 Workload Identity 配置为将 Kubernetes 服务账号用作 Google Cloud 服务账号。同一环境中,分布式服务的每个实例都有一个通用身份,从而简化了权限管理。访问 Google Cloud API 时,以 Kubernetes 服务账号运行的服务会自动以 Google Cloud 服务账号的身份进行身份验证。每项服务仅具有服务正常运行所需的最小权限。
后续步骤
- 阅读日志记录和监控(本系列的下一个文档)。