01 引言
声明:本文为《Kubernetes权威指南:从Docker到Kubernetes实践全接触(第5版)》的读书笔记
Service是Kubernetes实现微服务架构的核心概念,通过创建Service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并且将请求负载分发到 后端的各个容器应用上,本文主要对Service的资源定义进行详细说明。
02 资源定义详解
通过Service的定义设置的访问地址是DNS
域名格式的服务名称,对于客户端应用来说,网络访问方式并没有改变(DNS域名的作用等价于主机名、互联网域名或IP地址)。
Service还提供了负载均衡器功能,将客户端请求负载分发到后端提供具体服务的各个Pod上。
Service的YAML格式的定义文件的完整内容如下:
apiVersion: v1 kind: Service metadata: name: string namespace: string labels: - name: string annotations: - name: string spec: selector:[] type: string clusterIP: string sessionAffinity:string ports: - name: string protocol: string port: int targetPort: int nodePort: int status: loadBalancer: ingress: ip: string hostname: string
属性说明:
属性名称 | 取值类型 | 必选 | 取值说明 |
version | String | 是 | V1 |
kind | String | 是 | Service |
metadata | Object | 是 | 元数据 |
metadata.name | String | 是 | Service名称,需符合RFC 1035规范 |
metadata.namespace | String | 是 | 命名空间,不指定系统时将使用名称为default的命名空间 |
metadata.labels[] | list | 自定义标签属性列表 | |
metadata.annotation[] | list | 自定义注解属性列表 | |
spec | Object | 是 | 详细描述 |
spec.selector[] | list | 是 | Label Selector配置,将选择具有指定Label标签的Pod作为管理范围 |
spec.type | String | 是 | Service的类型,指定Service的访问方式,默认值为ClusterIP。 ClusterIP:虚拟服务IP地址,该地址用于Kubernetes 集群内部的Pod访问,在Node上kube-proxy通过设置的 iptables规则进行转发. NodePort:使用宿主机的端口,使能够访问各Node的外 部客户端通过Node的P地址和端口号就能访问服务. LoadBalancer:使用外接负载均衡器完成到服务的负载分发,需要在spec.status.loadBalancer字段指定外部负载均 衡器的P地址,同时定义nodePort和clusterIP,用于公有 云环境 |
spec.clusterIP | String | 虚拟服务的P地址,当type=ClusterIP时,如果不指定,则系统进行自动分配,也可以手工指定;当type=LoadBalancer 时,需要指定 | |
spec.sessionAffinity | String | 是否支持Session,可选值为ClientIP,默认值为None。 ClientIP:表示将同一个客户端(根据客户端的IP地址决定) 的访问请求都转发到同一个后端Pod | |
spec.ports[] | list | Service端口列表 | |
spec.ports[].name | String | 端口名称 | |
spec.ports[].protocol | String | 端口协议,支持TCP和UDP,默认值为TCP | |
spec.ports[].port | int | 服务监听的端口号 | |
spec.ports[].targetPort | int | 需要转发到后端Pod的端口号 | |
spec.ports[].nodePort | int | 当spec.type=NodePort时,指定映射到宿主机的端口号 | |
Status | Object | 当spec.type=LoadBalancer时,设置外部负载均衡器的地址,用于公有云环境 | |
status.loadBalancer | Object | 外部负载均衡器 | |
status.loadBalancer.ingress | Object | 外部负载均衡器 | |
status.loadBalancer.ingress.ip | String | 外部负载均衡器的IP地址 | |
status.loadBalancer.ingress.hostname | String | 外部负载均衡器的主机名 |
03 文末
本文主要讲解了Service资源类型的定义模板,以及对模板里面属性的解析,希望能帮助到大家,谢谢大家的阅读,本文完!