8.3. 使用服务公开虚拟机
				您可以通过创建 Service 对象在集群内或集群外公开虚拟机。
			
8.3.1. 关于服务
					Kubernetes 服务将客户端的网络访问权限公开给一组容器集上运行的应用。服务在 NodePort 和 LoadBalancer 类型方面提供抽象、负载均衡以及暴露于外部世界。
				
- ClusterIP
- 
								在内部 IP 地址上公开服务,并将 DNS 名称公开给集群中的其他应用程序。单个服务可映射到多个虚拟机。当客户端尝试连接到服务时,客户端请求会在可用后端之间平衡负载。ClusterIP是默认的服务类型。
- NodePort
- 
								在集群中每个所选节点的同一端口上公开该服务。NodePort使端口可从集群外部访问,只要节点本身可以被客户端外部访问。
- LoadBalancer
- 在当前云中创建外部负载均衡器(如果支持),并为该服务分配固定的外部 IP 地址。
对于内部集群,您可以通过部署 MetalLB Operator 来配置负载均衡服务。
8.3.2. 双栈支持
					如果为集群启用了 IPv4 和 IPv6 双栈网络,您可以通过定义 Service 对象中的 spec.ipFamilyPolicy 和 spec.ipFamilies 字段来创建使用 IPv4、IPv6 或两者的服务。
				
					spec.ipFamilyPolicy 字段可以设置为以下值之一:
				
- SingleStack
- control plane 根据配置的第一个服务集群 IP 范围为该服务分配集群 IP 地址。
- PreferDualStack
- control plane 为配置了双栈的集群中的服务分配 IPv4 和 IPv6 集群 IP 地址。
- RequireDualStack
- 
								对于没有启用双栈网络的集群,这个选项会失败。对于配置了双栈的集群,其行为与将值设置为 PreferDualStack时相同。control plane 从 IPv4 和 IPv6 地址范围分配集群 IP 地址。
					您可以通过将 spec.ipFamilies 字段设置为以下数组值之一来定义用于单堆栈的 IP 系列,或者定义双栈 IP 系列的顺序:
				
- 
							[IPv4]
- 
							[IPv6]
- 
							[IPv4, IPv6]
- 
							[IPv6, IPv4]
8.3.3. 使用命令行创建服务
您可以使用命令行创建服务并将其与虚拟机 (VM) 关联。
先决条件
- 您已将集群网络配置为支持该服务。
流程
- 编辑 - VirtualMachine清单,为创建服务添加标签:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 在spec.template.metadata.labels小节中添加special: key。
 注意- 虚拟机上的标签会传递到 pod。 - special: key标签必须与- Service清单的- spec.selector属性中的标签匹配。
- 
							保存 VirtualMachine清单文件以应用更改。
- 创建 - Service清单以公开虚拟机:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 
							保存 Service清单文件。
- 运行以下命令来创建服务: - oc create -f example-service.yaml - $ oc create -f example-service.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 重启虚拟机以应用更改。
验证
- 查询 - Service对象以验证它是否可用:- oc get service -n example-namespace - $ oc get service -n example-namespace- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow