3.3.3. 服务
Kubernetes 服务 充当内部负载均衡器。它标识一组复制的 pod,以代理其接收的连接。可以在服务中任意添加或删除支持 pod,同时服务始终保持可用,从而使依赖于服务的任何对象能够以一致的地址引用它。默认服务 clusterIP 地址来自 OpenShift Container Platform 内部网络,它们用于允许 pod 相互访问。
要允许从外部访问该服务,可以将集群外部的 externalIP
和 ingressIP
地址分配给该服务。这些 externalIP
地址也可以是虚拟 IP 地址,提供对该服务 的高可用性 访问权限。
服务被分配一个 IP 地址和端口对,访问时代理到适当的后备 pod。服务使用标签选择器来查找运行的所有容器,这些容器在特定端口上提供特定的网络服务。
与 pod 一样,服务是 REST 对象。以下示例显示了上方定义的 pod 的服务定义:
服务对象定义(YAML)
apiVersion: v1 kind: Service metadata: name: docker-registry 1 spec: selector: 2 docker-registry: default clusterIP: 172.30.136.123 3 ports: - nodePort: 0 port: 5000 4 protocol: TCP targetPort: 5000 5
Kubernetes 文档包含更多与服务相关的信息。
3.3.3.1. Service externalIPs
除了集群的内部 IP 地址外,用户还可配置集群外部的 IP 地址。管理员负责确保流量通过此 IP 到达节点。
集群管理员必须从 master-config.yaml 文件中配置的 externalIPNetworkCIDRs 范围内选择 externalIPs。当 master-config.yaml 发生更改时,必须重启 master 服务。
externalIPNetworkCIDR /etc/origin/master/master-config.yaml 示例
networkConfig: externalIPNetworkCIDRs: - 192.0.1.0.0/24
服务 externalIPs 定义(JSON)
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "my-service"
},
"spec": {
"selector": {
"app": "MyApp"
},
"ports": [
{
"name": "http",
"protocol": "TCP",
"port": 80,
"targetPort": 9376
}
],
"externalIPs" : [
"192.0.1.1" 1
]
}
}
- 1
- 用于在其上公开端口的外部 IP 地址列表。此列表除了内部 IP 地址列表之外。