K8S内部网络通信是如何实现的?
在本文中,我们将探讨Google Kubernetes Engine (GKE) 的网络组件以及现有的各种选项。Kubernetes是一个用于管理容器化工作负载和服务的开源平台,而 GKE 是一个完全托管的环境,用于在 Google Cloud 基础架构上运行 Kubernetes。
Cloud Ace 是谷歌云全球战略合作伙伴,拥有 300 多名工程师,也是谷歌最高级别合作伙伴,多次获得 Google Cloud 合作伙伴奖。
作为谷歌托管服务商,我们提供谷歌云、谷歌地图、谷歌办公套件、谷歌云认证培训服务。
Kubernetes 中的各种网络组件利用 IP 地址和端口进行通信。IP 地址是标识网络中各种组件的唯一地址。
组件
·容器 - 这些是执行应用程序进程的最小组件。一个或多个容器在一个 pod 中运行。
·Pods - 物理上组合在一起的容器集合。Pod 被分配给节点。
·节点 - 节点是集群中的工作机器(节点集合)。一个节点运行零个或多个 Pod。
服务
·ClusterIP - 这些地址分配给服务。
·负载均衡器 - 将内部流量或外部流量负载均衡到集群中的节点。
·Ingress - 处理 HTTP(S) 流量的特殊类型的负载均衡器。
IP 地址从各个子网分配给组件和服务。可变长度子网掩码 (VLSM) 用于创建CIDR块。子网上的可用主机数量取决于使用的子网掩码。
在 Google Cloud 中计算可用主机的公式是 2 n - 4,而不是通常用于本地网络的2 n - 2。
IP 地址分配流程如下所示:
·从集群的 VPC 网络为节点分配 IP 地址。
·默认情况下,内部负载均衡器 IP 地址是从节点 IPv4 块自动分配的。如有必要,您可以为负载均衡器创建一个指定范围,并使用该loadBalancerIP选项指定该范围内的地址。
·为 Pod 分配的地址来自发布给在该节点上运行的 Pod 的一系列地址。每个节点的默认最大 Pod 数为 110。要为该数字分配地址,数量乘以 2 (110*2=220) 并使用最近的子网,即 /24。这允许用于调度 pod 的缓冲区。此限制可在创建时自定义。
·容器共享它们运行的 Pod 的 IP 地址。
·服务(集群 IP)地址是从为服务保留的地址池中分配的。
VPC-native 集群文档的 VPC-native 集群的IP 地址范围部分为您提供了规划和确定地址范围的示例。
域名系统 (DNS)
DNS 允许名称到 IP 地址的解析。这允许为服务创建自动名称条目。GKE 中有几个选项。
·kube-dns - Kubernetes 原生附加服务。Kube-dns 在通过集群 IP 公开的部署上运行。默认情况下,集群中的 pod 使用此服务进行 DNS 查询。“ Using kube-dns ” 文档描述了它是如何工作的。
·Cloud DNS - 这是 Google Cloud DNS 托管服务。这可用于管理您的集群 DNS。Cloud DNS 相对于 kube-dns 的一些优势是:
-减少对集群托管 DNS 服务器的管理。
-支持 GKE 节点本地解析 DNS。这是通过在本地缓存响应来完成的,这提供了速度和可扩展性。
-与 Google Cloud Operations监控套件集成。
Service Directory是 Google Cloud 的另一项服务,可与 GKE 和 Cloud DNS 集成以通过命名空间管理服务。
gke -networking-recipes github repo 有一些 Service Directory 示例,您可以尝试用于 Internal LoadBalancers、ClusterIP、Headless 和 NodePort。
负载均衡器
这些控制访问并跨杂乱资源分配流量。GKE 中的一些选项包括:
Ingress
它们处理发往集群中服务的 HTTP(S) 流量。他们使用 Ingress 资源类型。使用它时,它会为 GKE 创建一个 HTTP(S) 负载平衡器。配置时,您可以为负载均衡器分配一个静态 IP 地址,以确保该地址保持不变。
在 GKE 中,您可以配置外部和内部 Ingress。以下指南的链接向您展示了如何配置:
GKE 允许您利用容器原生负载平衡,该负载平衡使用网络端点组 (NEG)将流量直接定向到 pod IP 。
服务路由
在这个主题中需要理解三个要点:
·前端-这会通过基于各种规则接受流量的前端向客户端公开您的服务。这可能是 DNS 名称或静态 IP 地址。
·负载均衡——一旦流量被允许,负载均衡器就会根据规则分配到可用资源以服务请求。
·后端-可以在 GKE 中使用的各种端点。
操作模式
在 GKE 中,您可以通过多种方式设计集群网络:
·标准- 此模式允许管理员配置集群底层基础设施。如果您需要更深层次的控制和责任,这种模式是有益的。
·Autopilot - GKE 配置和管理集群的底层基础设施。这是为使用而预先配置的,并为您提供了一些交接管理自由。
·专用集群(仅允许内部 IP 连接)。如果您需要客户端访问互联网(例如更新),您可以使用云 NAT。
·私有服务访问,(让您的 VPC通过私有 IP 地址与服务生产者服务通信。私有服务连接,(允许跨 VPC 网络私有使用服务)
总结
·IP 地址分配给集群中的各种资源
-Pods
-Nodes
-Containers
-Services
·这些 IP 地址范围是为各种资源类型保留的。您可以通过子网调整范围大小以满足您的要求。建议限制对集群的不必要的外部访问。
·默认情况下,Pod 具有跨集群通信的能力。
·要公开在 pod 上运行的应用程序,您需要一个服务。
·集群 IP 分配给服务。
·对于 DNS 解析,您可以依赖 kube-dns 等原生选项,也可以在 GKE 集群中使用 Google Cloud DNS。
·负载均衡器可以在集群内部和外部使用,以公开应用程序和分配流量。
·Ingress 处理 HTTP(S) 流量。这利用了来自谷歌云的 HTTP(S) 负载平衡器服务。Ingress 可用于内部和外部配置。