
在 Kubernetes 中,Service 是用于暴露应用程序的核心组件,支持多种访问方式。
1. ClusterIP(这是最常用的,也是默认类型)
作用:为服务分配一个集群内部 IP,仅允许集群内其他组件访问。
适用场景:内部服务间通信,比如微服务间调用等。
一个简单的示例配置:
apiVersion: v1kind: Servicemetadata:name: my-servicespec:type: ClusterIPselector:app: my-appports:- protocol: TCPport: 80targetPort: 9376
2. NodePort
作用:在每个节点(Node) 上开放一个静态端口(默认范围 30000-32767),流量通过 节点IP: 端口 访问服务。
适用场景:开发测试环境或需要直接从集群外访问的场景。
特点:
自动创建对应的 ClusterIP。
外部流量通过节点 IP 和端口转发到 Service。
示例配置:
spec:type: NodePortports:- port: 80targetPort: 9376nodePort: 30007 # 可选,不指定则随机分配
3. LoadBalancer
作用:通过云提供商的负载均衡器(比如腾讯云、阿里云等公有云商提供的负载均衡)分配外部 IP,自动将外部流量路由到 Service。
适用场景:生产环境需对外暴露服务(依赖云平台支持)。
特点:
自动创建对应的 ClusterIP 和 NodePort。
提供高可用和负载均衡能力。
示例配置
:
spec:type: LoadBalancer
4. ExternalName
作用:将服务映射到外部服务的 DNS 名称(如数据库、第三方 API),不创建代理或端口。这个是需要填写域名的,IP地址是无法生效的。
适用场景:集成集群外部的服务。
示例配置:
spec:type: ExternalNameexternalName: my.external-database.com
5. Headless Service(无头服务)
作用:通过设置 clusterIP: None 禁用 ClusterIP,直接暴露 Pod IP。DNS 查询返回所有 Pod 的 IP 地址。
适用场景:有状态应用(如数据库集群)或需要直接访问 Pod 的场景。
示例配置:
spec:clusterIP: Noneports:- name: esport: 9200protocol: TCPtargetPort: 9200selector:app: essessionAffinity: Nonetype: ClusterIP
总结:

文章转载自运维笔谈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




