文章目录1. NodePort1.1 核心概念1.2 工作原理1.3 端口分配机制1.4 案例演示1.5 服务验证测试1.6 优缺点与生产规范2. LoadBalancer2.1 核心概念2.2 工作原理2.3 案例演示2.4 验证测试2.5 生产核心优势与边界3. ExternalName3.1 核心概念3.2 工作原理3.3 案例演示3.4 生产致命坑点3.5 使用场景1. NodePort1.1 核心概念NodePort是Kubernetes用于集群外网临时暴露服务的基础资源类型严格基于ClusterIP构建。开启NodePort后K8s会在集群所有节点监听同一个固定物理端口外网用户通过任意节点「物理IPNodePort端口」即可访问集群内部服务。核心依赖关系NodePort内置ClusterIP创建NodePort服务必然自动生成ClusterIP同时支持「集群内VIP虚拟IP访问 集群外节点端口访问」双模式。1.2 工作原理当用户创建NodePort类型Service时控制平面会完成两层资源分配从ServiceCIDR池中分配固定ClusterIP用于集群内部流量转发从NodePort端口池中分配一个固定宿主机端口在所有节点开启端口监听。所有节点的kube-proxy会同步生成NodePort专属iptables/ipvs规则外网流量进入节点物理端口后经过内核规则转发至ClusterIP再经由负载均衡转发至后端真实Pod。外网客户端访问节点公网IP:30080完整链路如下节点端口监听流量抵达集群节点物理网卡被NodePort监听端口捕获内核规则拦截节点iptables匹配NodePort规则将外网流量转发至本机ClusterIP服务负载分发经由KUBE-SVC规则链随机选择后端健康PodDNAT地址转换将ClusterIP改写为真实Pod IP跨节点/本机投递通过CNI网络转发至目标业务Pod完成请求响应。核心特性任意节点均可转发流量单节点宕机不影响整体服务可用性。1.3 端口分配机制默认端口范围K8s官方固定预留30000–32767规避系统端口冲突自定义端口范围可通过kube-apiserver启动参数--service-node-port-range自主修改动静分区策略集群默认机制静态段30000–30085支持手动指定port适合固定端口业务动态段30086–32767未指定端口时集群自动随机分配降低冲突概率多网卡精准绑定生产多网卡节点可通过kube-proxy参数--nodeport-addresses限定NodePort仅绑定内网/公网指定网卡避免服务错误暴露。1.4 案例演示基于前文Nginx3副本集群创建NodePort服务支持手动指定端口。apiVersion:v1kind:Servicemetadata:name:nginx-nodeport-svcnamespace:defaultspec:# 服务类型指定为NodePorttype:NodePortselector:app:nginx-webports:-name:http-webport:8080targetPort:80nodePort:30080# 手动指定静态端口可选30000-30085protocol:TCP关键字段解析type: NodePort声明为节点端口暴露模式nodePort手动指定宿主机端口不写则集群自动随机分配保留port、targetPort解耦特性兼容集群内访问与外网访问。1.5 服务验证测试查看NodePort服务信息kubectl get svc nginx-nodeport-svc输出示例NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)AGE nginx-nodeport-svc NodePort10.101.1.227none8080:30089/TCP 2m37s查看后端Pod端点kubectl get endpoints nginx-nodeport-svc输出示例NAME ENDPOINTS AGE nginx-nodeport-svc100.8.42.200:80,100.8.42.203:80,100.9.87.177:80 3m26s外网访问测试替换为任意节点IPcurl节点IP:300801.6 优缺点与生产规范优点零依赖、无需云厂商组件物理机集群、虚拟机集群通用配置极简快速暴露服务适合测试调试全节点监听具备基础高可用能力。缺点 生产禁忌端口数量有限最大仅2768个可用端口无法大规模部署业务可修改无七层路由、无证书、无限流、无监控流量治理能力缺失直接暴露节点端口存在节点端口扫描、攻击风险。生产规范仅用于测试环境、临时调试、内网穿透严禁生产公网直接使用。2. LoadBalancer2.1 核心概念LoadBalancer是云托管 K8s 生产环境标准对外服务方案在ClusterIPNodePort双层能力之上对接云厂商负载均衡组件阿里云SLB、腾讯云CLB、AWS ELB自动分配独立公网/内网固定IP实现企业级高可用、高安全、高并发的外网服务发布。环境限制仅云厂商EKS/ACK/TKE等托管集群原生支持物理机自建K8s无原生LoadBalancer能力需手动部署metallb组件实现。2.2 工作原理LoadBalancer是三层嵌套转发模型自上而下依次为云LB-NodePort-ClusterIP-Pod创建流程全自动自动生成底层资源创建LoadBalancer服务时集群自动创建专属ClusterIP和NodePort端口云端资源自动创建云控制器监听Service变更自动在云端创建SLB/CLB负载均衡实例后端节点自动注册云LB自动将集群所有健康节点的NodePort端口加入后端池自动剔除故障节点全链路流量托管外网流量统一经过云LB清洗、防护、调度后转发至集群内部。2.3 案例演示apiVersion:v1kind:Servicemetadata:name:nginx-lb-svcnamespace:defaultspec:# 生产对外核心类型type:LoadBalancerselector:app:nginx-webports:-name:http-webport:80targetPort:80protocol:TCP# 可选开启会话保持sessionAffinity:ClientIPsessionAffinityConfig:clientIP:timeoutSeconds:1800字段核心解析type: LoadBalancer触发云厂商自动创建负载均衡实例无需手动配置NodePort、ClusterIP全部自动分配兼容会话保持、权重调度、健康检查等拓展能力云厂商可拓展配置内网LB、公网LB、带宽限速、DDoS防护、黑白名单。2.4 验证测试查看LB服务获取自动分配的公网IPkubectl get svc nginx-lb-svc输出示例NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)AGE nginx-lb-svc LoadBalancer10.98.85.4pending80:43812/TCP 71s该类型仅在云厂商托管K8s集群EKS、ACK、TKE等支持物理机自建K8s集群无原生LoadBalancer能力所以一直显示pending状态。2.5 生产核心优势与边界生产优势独享公网IP稳定不漂移适合域名绑定上线依托云LB原生能力DDoS防护、流量监控、日志审计、带宽扩容自动故障摘除节点实现秒级高可用切换无需暴露节点IP集群内网节点安全隔离。适用边界中小型业务直接使用 · 对外暴露大型多域名、多路径业务建议LoadBalancerIngress/Gateway API组合使用。3. ExternalName3.1 核心概念ExternalName是K8s唯一的无代理、无端口、无流量转发特殊Service类型。它不做四层负载均衡、不转发数据包、不绑定任何Pod端点仅作为集群CoreDNS的域名别名解析工具将集群内部Service域名CNAME映射到集群外部的独立域名。该类型彻底脱离传统Service流量转发模型仅作用于DNS解析层是纯域名解析资源。3.2 工作原理传统ClusterIP/NodePort/LoadBalancer均依赖kube-proxy内核规则转发流量而ExternalName完全不依赖创建ExternalName资源后集群CoreDNS自动生成一条CNAME解析记录集群内Pod访问该Service域名时DNS直接返回外部目标域名客户端拿到外部域名后直接访问外部服务流量不经过集群任何代理。核心特点无ClusterIP、无端口、无后端端点、无流量转发、无负载均衡。3.3 案例演示将集群内域名my-service.prod.svc.cluster.local映射至外部数据库域名my.database.example.comapiVersion:v1kind:Servicemetadata:name:my-servicenamespace:prodspec:type:ExternalNameexternalName:my.database.example.com⚠️ 重点ExternalName Service不在网络层转发流量仅在集群CoreDNS中注册一条CNAME记录。集群内程序访问内部Service域名时DNS自动引导至外部目标域名实现域名别名映射。仅域名翻译不存在代理。3.4 生产致命坑点ExternalName仅适配 TCP 裸连接服务完全不适合HTTP/HTTPS七层业务生产高频报错原因HTTP Host 头不匹配客户端请求Host为内部Service域名外部Web服务无法识别直接404HTTPS 证书校验失败证书域名与访问域名不一致SSL握手失败无流量治理能力无重试、超时、限流、监控、熔断故障无法自愈。3.5 使用场景✅推荐使用场景集群内统一管理外部中间件域名MySQL、Redis、MQ、ESTCP协议、无Host依赖、无证书校验的外部服务统一收口外部依赖业务仅调用内部固定域名外部地址变更无需改代码。❌绝对禁止场景所有HTTP/HTTPS网站、接口、网关七层业务需要SSL证书校验、域名鉴权的服务需要流量监控、限流、灰度的核心业务。