当前位置: 首页 > news >正文

【K8S】详解NodePort 和 ClusterIP

NodePort 和 ClusterIP 是 Kubernetes 中两种核心服务(Service)类型,它们在访问范围、实现机制和使用场景上有显著区别,但也存在紧密联系。以下是详细对比分析:


🔍 一、核心区别

​特性​​ClusterIP​​NodePort​
​访问范围​仅限集群内部访问(通过虚拟 IP)支持集群外部访问(通过节点 IP + 端口)
​暴露方式​分配虚拟 IP(ClusterIP),无节点端口暴露在每个节点开放固定端口(默认 30000-32767)
​负载均衡机制​kube-proxy 自动实现内部流量分发与 ClusterIP 相同,额外通过节点端口接收外部流量
​适用场景​微服务间通信、数据库等内部服务开发测试环境、临时外部访问
​安全性​更高(仅内部可达)较低(直接暴露节点 IP 和端口)

🔗 二、联系与协作

  1. ​底层依赖关系​​:

    • ​NodePort 基于 ClusterIP 实现​​:创建 NodePort 服务时,Kubernetes 会​​自动分配一个 ClusterIP​​ 作为内部访问入口,并额外开放节点端口。
    • ​流量路径​​:外部请求 → 节点 IP:NodePort → ClusterIP → 后端 Pod。
  2. ​负载均衡机制​​:
    两者均通过 kube-proxy 实现内部流量分发(如 iptables/IPVS 规则),确保请求均匀转发到后端 Pod。

  3. ​服务发现​​:
    ClusterIP 和 NodePort 服务均可通过 DNS 名称(如 my-service.default.svc.cluster.local)在集群内部解析。


⚙️ 三、典型配置示例

​1. ClusterIP 示例​
apiVersion: v1
kind: Service
metadata:name: embedding # 用户示例中的 ClusterIP 服务
spec:type: ClusterIPselector:app: embedding-appports:- port: 8080          # 服务端口targetPort: 8080    # Pod 端口
  • ​访问方式​​:集群内通过 10.100.217.4:8080 或 DNS 名称访问。
​2. NodePort 示例​
apiVersion: v1
kind: Service
metadata:name: embed             # 用户示例中的 NodePort 服务
spec:type: NodePortselector:app: embed-appports:- port: 8080          # 服务端口targetPort: 8080    # Pod 端口nodePort: 32080     # 节点端口(用户示例为 32080)
  • ​访问方式​​:
    • 集群内部:通过 70.114.188.169:8080(ClusterIP)访问。
    • 集群外部:通过 任意节点IP:32080(如 http://192.168.1.100:32080)访问。

⚠️ 四、关键注意事项

  1. ​NodePort 的局限性​​:

    • 端口范围受限(30000-32767),可能冲突。
    • 直接暴露节点 IP,需配合防火墙规则降低风险。
    • ​生产环境建议​​:优先使用 ​​Ingress​​ 或 ​​LoadBalancer​​ 替代。
  2. ​ClusterIP 的扩展性​​:

    • 若需对外暴露 ClusterIP 服务,可通过 ​​Ingress 代理​​或 ​​kubectl port-forward​​ 临时实现。
  3. ​选择建议​​:

    ​场景​​推荐类型​​原因​
    微服务间通信(如数据库)ClusterIP安全隔离,无需外部暴露
    开发环境临时测试NodePort快速暴露,无需额外配置
    生产环境对外服务LoadBalancer/Ingress提供负载均衡、HTTPS 等高级能力

💎 总结

  • ​区别本质​​:
    ​ClusterIP 是集群内部的“专用通道”​​,仅服务内部通信;​​NodePort 是内外通吃的“门户”​​,通过节点端口暴露服务。
  • ​联系​​:NodePort 依赖 ClusterIP 实现内部路由,二者共同构成 Kubernetes 服务暴露的基础层次。
  • ​用户示例解析​​:
    • embed(NodePort):通过 32080 端口支持外部访问,适合调试。
    • embedding(ClusterIP):仅限内部通信,保障后端服务安全。

生产环境中,建议将 NodePort 升级为 ​​Ingress​​ 或 ​​LoadBalancer​​ 以提升安全性和可用性。

http://www.lryc.cn/news/572416.html

相关文章:

  • 大数据复习HDFS
  • 11.0592MHz晶振:电脑主板的“心脏”
  • 通过Docker挂载nginx并修改页面
  • ros中相机话题在web页面上的显示,尝试js解析sensor_msgs/Image数据
  • 嵌入式开发之freeRTOS移植
  • Kafka性能调优全攻略:从JVM参数到系统优化
  • Java的SpringAI+Deepseek大模型实战
  • 基于keepalived、vip实现高可用nginx (centos)
  • mongodb单节点改副本集模式
  • Python 开发环境全栈隔离架构:从 Anaconda 到 PyCharm 的四级防护体系
  • NetworkManager介绍与用法
  • 【单片机】51单片机练习代码
  • GRBL_UNO R3编译下载
  • Spring Boot 虚拟线程 vs WebFlux:谁更胜一筹?
  • Spring-创建第一个SpringBoot项目
  • apisix-使用hmac-auth插件进行接口签名身份验证\apisix consumer
  • SpringBoot项目启动时自动加载数据到Redis的完整实现方案,用于存储字典,定时任务,登录用户等
  • Spring @Autowired 依赖注入全解析
  • 语音情感识别:CNN-LSTM 和注意力增强 CNN-LSTM 模型的比较分析
  • Hive优化详细讲解
  • Redis 的优势有哪些,它是CP 还是 AP?CAP 理论又是什么?
  • C#的泛型和匿名类型
  • Ubuntu最新版本(Ubuntu22.04LTS)安装nfs服务器
  • Java八股文——计算机网络「传输层篇」
  • CppCon 2017 学习:Everything You Ever Wanted to Know about DLLs
  • CppCon 2017 学习:dynamic_cast from scratch
  • 【AJAX 实战】图书管理系统上 渲染图书列表+新增图书+删除图书
  • windows系统JDK1.8 与JDK 17切换
  • css3 文本效果(text-shadow、text-overflow、word-wrap、word-break)文本阴影、文本换行、文本溢出并隐藏显示省略号
  • 数据结构 6(算法)