apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
name: example-vm
namespace: example-namespace
spec:
running: false
template:
metadata:
labels:
special: key (1)
# ...
Kubernetes 服务为客户端公开对在一些 Pod 上运行的应用程序的网络访问。服务提供抽象、负载均衡,并且在NodePort
和LoadBalancer
类型的情况下,还提供对外部世界的访问。
在内部 IP 地址和 DNS 名称上公开服务,以便集群内的其他应用程序可以使用。单个服务可以映射到多个虚拟机。当客户端尝试连接到服务时,客户端的请求会在可用的后端之间进行负载均衡。ClusterIP
是默认的服务类型。
在集群中每个选定节点的同一端口上公开服务。NodePort
使得端口可以从集群外部访问,只要节点本身对客户端外部可访问即可。
在当前云中(如果支持)创建一个外部负载均衡器,并为服务分配一个固定的外部 IP 地址。
对于内部部署集群,您可以通过部署 MetalLB 运算符来配置负载均衡服务。 |
如果为您的集群启用了 IPv4 和 IPv6 双协议栈网络,则可以通过定义Service
对象中的spec.ipFamilyPolicy
和spec.ipFamilies
字段来创建使用 IPv4、IPv6 或两者的服务。
spec.ipFamilyPolicy
字段可以设置为以下值之一
控制平面根据第一个配置的服务集群 IP 范围为服务分配集群 IP 地址。
对于已配置双协议栈的集群,控制平面将为服务分配 IPv4 和 IPv6 集群 IP 地址。
对于未启用双协议栈网络的集群,此选项将失败。对于已配置双协议栈的集群,其行为与值设置为PreferDualStack
时相同。控制平面将从 IPv4 和 IPv6 地址范围分配集群 IP 地址。
您可以定义要用于单协议栈的 IP 族,或者通过将spec.ipFamilies
字段设置为以下数组值之一来定义双协议栈的 IP 族顺序
[IPv4]
[IPv6]
[IPv4, IPv6]
[IPv6, IPv4]
您可以使用命令行创建服务并将其与虚拟机 (VM) 关联。
您已配置集群网络以支持该服务。
编辑VirtualMachine
清单以添加服务创建的标签
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
name: example-vm
namespace: example-namespace
spec:
running: false
template:
metadata:
labels:
special: key (1)
# ...
1 | 将special: key 添加到spec.template.metadata.labels 节。 |
虚拟机上的标签会传递到 Pod。 |
保存VirtualMachine
清单文件以应用更改。
创建Service
清单以公开虚拟机
apiVersion: v1
kind: Service
metadata:
name: example-service
namespace: example-namespace
spec:
# ...
selector:
special: key (1)
type: NodePort (2)
ports: (3)
protocol: TCP
port: 80
targetPort: 9376
nodePort: 30000
1 | 指定您添加到VirtualMachine 清单的spec.template.metadata.labels 节中的标签。 |
2 | 指定ClusterIP 、NodePort 或LoadBalancer 。 |
3 | 指定要从虚拟机公开的一组网络端口和协议。 |
保存Service
清单文件。
运行以下命令创建服务
$ oc create -f example-service.yaml
重新启动虚拟机以应用更改。
查询Service
对象以验证其是否可用
$ oc get service -n example-namespace