【Kubernetes】Service 的类型有哪些?ClusterIP、NodePort 和 LoadBalancer 的区别?

  • 在 Kubernetes 中,Service 是一种抽象的方式,用于将一组 Pod 进行连接并暴露给外部或集群内部访问。
  • 它的主要目的是通过提供稳定的 IP 地址和端口来允许其他服务或客户端与一组 Pod 进行通信。

Service 类型

Kubernetes 中 Service 有四种主要类型,分别是:

  1. ClusterIP (默认类型)
  2. NodePort
  3. LoadBalancer
  4. ExternalName

各种类型的区别

1. ClusterIP
  • 作用 :这是默认的 Service 类型,主要用于集群内部的访问。它为 Service 分配一个集群内的 IP 地址。

  • 访问范围:仅限于 Kubernetes 集群内部的其他 Pod 可以访问该 Service,不能从外部直接访问。

  • 适用场景:用于集群内部服务之间的通信,例如微服务架构中的内部通信。

  • 示例

    yaml 复制代码
    kind: Service
    apiVersion: v1
    metadata:
      name: my-service
    spec:
      type: ClusterIP
      selector:
        app: my-app
      ports:
        - port: 80
          targetPort: 8080
2. NodePort
  • 作用 :通过为每个 Node 分配一个端口号(NodePort)来暴露 Service,从而可以通过集群中任意 Node 的 IP 和指定端口访问 Service。

  • 访问范围 :可以从集群外部通过 <NodeIP>:<NodePort> 的方式访问服务。通常会与 ClusterIP 配合使用,前者处理集群内部流量,后者则暴露端口给外部。

  • 适用场景:适用于需要从外部访问 Kubernetes 集群内服务的场景,比如开发测试环境。

  • 示例

    yaml 复制代码
    kind: Service
    apiVersion: v1
    metadata:
      name: my-service
    spec:
      type: NodePort
      selector:
        app: my-app
      ports:
        - port: 80
          targetPort: 8080
          nodePort: 30007  # 端口号通常在 30000-32767 之间
3. LoadBalancer
  • 作用 :为 Service 提供一个外部负载均衡器(例如 AWS ELB、GCP Load Balancer 等)。当使用 LoadBalancer 类型时,Kubernetes 会自动请求云服务提供商来创建一个负载均衡器并将流量转发到集群中的 Service

  • 访问范围:可以通过外部负载均衡器的 IP 地址或域名访问集群中的 Service。

  • 适用场景:适用于需要高可用、可伸缩、并且从外部可以访问的服务,如生产环境中的 Web 应用。

  • 示例

    yaml 复制代码
    kind: Service
    apiVersion: v1
    metadata:
      name: my-service
    spec:
      type: LoadBalancer
      selector:
        app: my-app
      ports:
        - port: 80
          targetPort: 8080
4. ExternalName
  • 作用 :通过一个 CNAME 记录,将 Service 映射到外部的 DNS 名称。这意味着该 Service 不会指向集群内的 Pod,而是指向外部的某个 DNS 记录。

  • 访问范围:用于从 Kubernetes 集群内部访问外部服务。

  • 适用场景:适用于需要将外部服务映射到集群内部的场景,例如访问外部的数据库或 API 服务。

  • 示例

    yaml 复制代码
    kind: Service
    apiVersion: v1
    metadata:
      name: my-service
    spec:
      type: ExternalName
      externalName: example.com  # 外部 DNS 名称

总结:ClusterIP、NodePort 和 LoadBalancer 的区别

类型 访问范围 适用场景 是否支持外部访问 使用场景例子
ClusterIP 集群内部访问 集群内服务间的通信 微服务之间的内部通信
NodePort 集群内外访问,外部通过 Node IP 和端口访问 需要从集群外部访问服务 测试环境或开发环境中访问服务
LoadBalancer 集群内外访问,提供外部负载均衡器 从外部访问服务,需要高可用、负载均衡 生产环境中需要外部访问的 Web 应用
ExternalName 外部 DNS 名称映射 将外部服务映射为 Kubernetes 内部服务 访问外部的数据库或 API 服务

小结

  • ClusterIP:只限内部访问,适合内部服务通信。
  • NodePort:允许外部通过指定端口访问集群,适合开发测试环境。
  • LoadBalancer:提供外部负载均衡器,适合生产环境。
  • ExternalName:通过外部 DNS 名称访问服务,适合连接外部资源。

https://github.com/0voice

相关推荐
你可以叫我仔哥呀1 小时前
k8s学习记录(三):Pod基础-Node选择
学习·docker·kubernetes
oh LAN1 小时前
基于阿里云函数计算(FC)x 云原生 API 网关构建生产级别 LLM Chat 应用方案最佳实践
阿里云·云原生·云计算·阿里云函数计算fc
alden_ygq2 小时前
k8s 配置两个deployment主机级别互斥部署
云原生·容器·kubernetes
4dm1n4 小时前
HPA怎么实现的☆
kubernetes
阿里云大数据AI技术4 小时前
演讲实录|分布式 Python 计算服务 MaxFrame 介绍及场景应用方案
大数据·云原生·云计算
运维小文6 小时前
prometheus自定义监控(pushgateway和blackbox)和远端存储VictoriaMetrics
云原生·prometheus·监控·linux运维·victoriametrics
敖云岚6 小时前
【云原生技术】容器技术的发展史
开发语言·云原生·perl
张敬之、6 小时前
k8s-dashboard
云原生·容器·kubernetes
云上艺旅6 小时前
K8S学习之基础二十九:K8S中的secret
学习·云原生·容器·kubernetes