暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Kubernetes中各种类型的service,什么场景该选用哪种service?

运维笔谈 2025-02-26
107

在 Kubernetes 中,Service 是用于暴露应用程序的核心组件,支持多种访问方式。

1. ClusterIP(这是最常用的,也是默认类型)

作用:为服务分配一个集群内部 IP,仅允许集群内其他组件访问。

适用场景:内部服务间通信,比如微服务间调用等。

一个简单的示例配置:

    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      type: ClusterIP
      selector:
        app: my-app
      ports:
        - protocol: TCP
          port: 80
          targetPort: 9376

    2. NodePort

    作用:在每个节点(Node) 上开放一个静态端口(默认范围 30000-32767),流量通过 节点IP: 端口 访问服务。

    适用场景:开发测试环境或需要直接从集群外访问的场景。

    特点:

    • 自动创建对应的 ClusterIP。

    • 外部流量通过节点 IP 和端口转发到 Service。


    示例配置:

      spec:
        type: NodePort
        ports:
          - port: 80
            targetPort: 9376
            nodePort: 30007  # 可选,不指定则随机分配

      3. LoadBalancer

      作用:通过云提供商的负载均衡器(比如腾讯云、阿里云等公有云商提供的负载均衡)分配外部 IP,自动将外部流量路由到 Service。

      适用场景:生产环境需对外暴露服务(依赖云平台支持)。

      特点:

      • 自动创建对应的 ClusterIP 和 NodePort。

      • 提供高可用和负载均衡能力。


      示例配置

        spec:
          type: LoadBalancer

        4. ExternalName

        作用:将服务映射到外部服务的 DNS 名称(如数据库、第三方 API),不创建代理或端口。这个是需要填写域名的,IP地址是无法生效的。

        适用场景:集成集群外部的服务。

        示例配置:

          spec:
            type: ExternalName
            externalName: my.external-database.com

          5. Headless Service(无头服务)

          作用:通过设置 clusterIP: None 禁用 ClusterIP,直接暴露 Pod IP。DNS 查询返回所有 Pod 的 IP 地址。

          适用场景:有状态应用(如数据库集群)或需要直接访问 Pod 的场景。

          示例配置:

            spec:
              clusterIP: None
              ports:
              - name: es
                port: 9200
                protocol: TCP
                targetPort: 9200
              selector:
                app: es
              sessionAffinity: None
              type: ClusterIP

            总结:

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

            评论