1.4. pod 如何通信
Pod 使用 IP 地址进行通信,并使用 DNS 来发现 pod 或服务的 IP 地址。集群使用各种策略类型来控制允许的通信。Pod 以两种方式通信: pod 到 pod 的通信和服务到 pod 的通信。
1.4.1. pod 到 pod 的通信 复制链接链接已复制到粘贴板!
pod 到 pod 的通信代表 pod 能够在集群中相互通信。这对微服务和分布式应用的功能至关重要。
集群中的每个 pod 都会被分配一个唯一 IP 地址,用来直接与其他 pod 通信。Pod 到 pod 的通信对于集群内部通信非常有用,Pod 需要相互间交换数据或协作执行任务。例如,Pod A 可以使用 Pod B 的 IP 地址直接向 Pod B 发送请求。pod 可以在没有网络地址转换(NAT)的情况下通过扁平网络通信。这允许在不同节点间的 pod 间无缝通信。
1.4.1.1. 示例:控制 pod 到 pod 的通信 复制链接链接已复制到粘贴板!
在有多个容器的基于微服务的应用中,前端 pod 需要与后端 pod 通信来检索数据。通过使用 pod 到 pod 的通信(直接或通过服务进行),这些 pod 可以有效地交换信息。
要控制和保护 pod 到 pod 的通信,您可以定义网络控制。这些控制用来强制实施安全性和合规要求,它基于标签和选择器指定 pod 如何相互交流。
1.4.2. 服务到 pod 的通信 复制链接链接已复制到粘贴板!
服务到 pod 通信可确保服务能够可靠地将网络流量路由到适当的 pod。服务是对象,用于定义 pod 的逻辑集合并提供稳定的端点,如 IP 地址和 DNS 名称。Pod IP 地址可能会改变。服务抽象 pod IP 地址,以提供一致的访问应用程序组件,即使 IP 地址有变化。
服务到 pod 通信的主要概念包括:
- 端点:端点定义了与服务关联的 pod 的 IP 地址和端口。
 - 选择器:选择器(Selector)使用标签(如键值对)来定义选择服务应目标的一组对象的条件。
 - 服务:服务为一组 pod 提供稳定的 IP 地址和 DNS 名称。此抽象允许其他组件与服务而不是单个 pod 通信。
 - 服务发现:DNS 使服务可被发现。在创建服务时,会为其分配一个 DNS 名称。其他 pod 发现此 DNS 名称,并使用它来与服务通信。
 服务类型 :服务类型控制如何在集群内部或外部公开服务。
- ClusterIP 在内部集群 IP 上公开服务。它是默认的服务类型,使该服务只能从集群内部访问。
 - NodePort 允许外部流量来访问服务,它使用节点的 IP 通过一个静态端口公开服务。
 - LoadBalancer 使用云供应商的负载均衡器向外部公开服务。
 
					服务使用选择器来标识应接收流量的 pod。选择器与 pod 上的标签匹配,以确定哪些 pod 是服务的一部分。示例:带有选择器 app: myapp 的服务,会将流量路由到带有标签 app: myapp 的所有 pod。
				
端点会被动态更新,以反映与服务选择器匹配的 pod 的当前 IP 地址。OpenShift Container Platform 维护这些端点,并确保服务将流量路由到正确的 pod。
通信流指的是 Kubernetes 中的服务将流量路由到适当 pod 时发生的步骤和交互序列。服务到 pod 通信的典型通信流如下:
服务创建:当您创建服务时,您可以定义服务类型、服务侦听的端口以及选择器标签。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 
							DNS 解析:每个 pod 都有一个 DNS 名称,其他 pod 可以使用该名称与服务通信。例如,如果服务在 
my-app命名空间中的名称为my-service,其 DNS 名称为my-service.my-app.svc.cluster.local。 - 流量路由 :当 pod 将请求发送到服务的 DNS 名称时,OpenShift Container Platform 会将名称解析为服务的 ClusterIP。然后,服务使用端点将流量路由到与其选择器匹配的其中一个 pod。
 - 负载平衡:服务还提供基本的负载平衡。它们在所有与选择器匹配的 pod 之间分发传入的流量。这样可确保没有单个 pod 消耗太多的流量。
 
1.4.2.1. 示例:控制服务到 pod 的通信 复制链接链接已复制到粘贴板!
集群正在运行基于微服务的应用,它有两个组件:前端和后端。前端需要与后端通信来获取数据。
流程
创建后端服务。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置后端 pod。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 建立前端通信。
前端 pod 现在可以使用 DNS 名称
backend.default.svc.cluster.local与后端服务通信。该服务可确保流量路由到其中一个后端 Pod。
服务到 pod 通信会抽象管理 pod IP 的复杂性,并确保集群中的可靠和高效的通信。