Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

3.3.3. 服务

Kubernetes 服务 充当内部负载均衡器。它标识一组复制的 pod,以代理其接收的连接。可以在服务中任意添加或删除支持 pod,同时服务始终保持可用,从而使依赖于服务的任何对象能够以一致的地址引用它。默认服务 clusterIP 地址来自 OpenShift Container Platform 内部网络,它们用于允许 pod 相互访问。

要允许从外部访问该服务,可以将集群外部externalIPingressIP 地址分配给该服务。这些 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

1
服务名称 docker-registry 也用于在命名空间中使用插入到其他 pod 中的服务 IP 的环境变量。名称长度最多为 63 个字符。
2
标签选择器识别所有带有作为后备 pod 附加的 docker-registry=default 标签的 pod。
3
服务的虚拟 IP,从内部 IP 池自动创建。
4
服务侦听的端口。
5
服务将连接转发到的后备 pod 上的端口。

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 地址列表之外。