3.3.3.5. 无头服务
如果您的应用程序不需要负载均衡或单一服务 IP 地址,您可以创建一个无头服务。当您创建无头服务时,不会执行负载均衡或代理,也不会为该服务分配集群 IP。对于此类服务,DNS 会根据服务是否定义了选择器来自动配置。
使用选择器的服务 :对于定义选择器的无头服务,端点控制器会在 API 中创建 Endpoints
记录,并修改 DNS 配置来返回指向支持该服务的 pod 的 A
记录(地址)。
没有选择器的服务 :对于不定义选择器的无头服务,端点控制器不会创建 端点
记录。但是,DNS 系统会查找并配置以下记录:
-
对于
ExternalName
类型服务,为CNAME
记录。 -
对于所有其他服务类型,对于与服务共享名称的任何端点的
记录
。
3.3.3.5.1. 创建无头服务
创建无头服务与创建标准服务类似,但不会声明 ClusterIP
地址。要创建无头服务,请添加 clusterIP:none
参数值为服务 YAML 定义。
例如,对于您要成为同一集群或服务一部分的 pod 组。
Pod 列表
$ oc get pods -o wide
输出示例
NAME READY STATUS RESTARTS AGE IP NODE frontend-1-287hw 1/1 Running 0 7m 172.17.0.3 node_1 frontend-1-68km5 1/1 Running 0 7m 172.17.0.6 node_1
您可以将无头服务定义为:
无头服务定义
apiVersion: v1 kind: Service metadata: labels: app: ruby-helloworld-sample template: application-template-stibuild name: frontend-headless 1 spec: clusterIP: None 2 ports: - name: web port: 5432 protocol: TCP targetPort: 8080 selector: name: frontend 3 sessionAffinity: None type: ClusterIP status: loadBalancer: {}
另外,无头服务本身没有任何 IP 地址。
$ oc get svc
输出示例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE frontend ClusterIP 172.30.232.77 <none> 5432/TCP 12m frontend-headless ClusterIP None <none> 5432/TCP 10m