AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
[TOC] # 服务暴露 共有四种类型: * ClusterIP * NodePort * LoadBalancer * ExternalName * Headless ### ClusterIP 仅在集群内可达,这个为service的默认方式 ### NodePort 在每个节点的IP地址的某个端口上暴露服务,将节点端口的流量转发到目标 Service 的 ClusterIP 上,通过:进行访问. > k8s默认NodePort的范围为 30000~32767 ##### 示例 ~~~ kind: Service apiVersion: v1 matadata: name: myapp-svc-nodeport spec: type: NodePort selector: app: myapp ports: - protocol: TCP port: 80 targetPort: 80 nodePort: 32223 #不写这段的话,k8s会默认自动分配 ~~~ ### LoadBalancer LoadBalancer 构建在NodePort类型之上,通过云供应商提供的负载均衡器,将服务暴露在集群外部,因此LoadBalancer一样具有NodePort 和ClusterIP。 > 一个LoadBalancer类型的service服务,会指向到集群外部真实存在的某个负载均衡器上,该负载均衡器会把所有客户端的请求,都调度到所有NodePort之上,不依赖客户端自行选择用哪个节点 ##### 示例 ~~~ kind: Service apiVersion: v1 matadata: name: myapp-svc-lb spec: type: LoadBalancer loadBalancerIP: XX.XX.XX.XX #如果环境支持手动指定lb的IP地址时,用这个 LoadBalancerSourceRanges: x.x.x.x-x.x.x.x #限制客户端地址的来源范围 selector: app: myapp ports: - protocol: TCP port: 80 targetPort: 80 nodePort: 32223 ~~~ ### ExternalName 这个类型不由k8s集群提供服务,而是把集群外不的某服务,以DNS的方式映射到集群内,从而让内部Pod能访问外部service。这个类型的service没有clusterIP和NodePort,也没有标签选择器用于选择Pod,因此也没有Endpoints存在 > 这个是将外部服务发布到集群内部 ##### 示例 ~~~ kind: service apiVersion: v1 metadata: name: external-redis-svc namespace: default spec: type: ExternalName externalName: redis.ilinux.io ports: - protocol: TCP port: 6379 targetPort: 6379 nodePort: 0 selector: {} ~~~ 这个创建完成后,Pod可以通过 external-redis-svc或其FQDN格式 的名称external-redis-svc.default.svc.cluster.local访问相应的服务。 ### headless类型的service资源 客户端需要**直接访问**Service资源后端的所有Pod资源,这时就应该向客户端**暴露每个Pod资源的IP地址**,而不再是中间层Service对象的ClusterIP,这种类型的Service资源便称为Headless Service。 ##### 示例 只需要将ClusterIP字段设置为“None”,就是headless类型了 ~~~ kind: Service apiVersion: v1 matadata: name: myapp-headless-svc spec: ClusterIP: None selector: app: myapp ports: - port: 80 targetPort: 80 name: httpport ~~~ ~~~ #通过nslookup解析myapp-headless-svc nslookup myapp-headless-svc Server: 10.96.0.10 Address 1:10.96.0.10 kube-dns.kube-system.svc.cluster.local Name: myapp-headless-svc Address 1: 10.244.2.13 Address 2: 10.244.1.113 Address 3: 10.244.3.104 ~~~