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

Kubernetes中Service的几个类型示例

运维笔谈 2024-04-24
1

Kubernetes 中的服务(Service)是一个抽象概念,它定义了 Pod 的逻辑集和访问 Pod 的协议。

集群中的每个 Pod 都有一个唯一的 IP 地址,但是如果没有 Service,这些 IP 不会被公开到集群外部。Service 允许应用接收流量。通过设置 Service 的 spec 中的 type,可以用不同的方式公开 Service:

  1. ClusterIP(默认)- 在集群的内部 IP 上公开 Service。这种类型的 Service 只能从集群内访问。

  2. NodePort - 使用 NAT 在集群中每个选定 Node 的相同端口上公开 Service 。使用<NodeIP>:<NodePort> 从集群外部访问 Service。是 ClusterIP 的超集。

  3. LoadBalancer - 在当前公有云中创建一个外部负载均衡器,并为 Service 分配一个固定的外部IP。是 NodePort 的超集。

  4. ExternalName - 将 Service 映射到 externalName 字段的内容(例如 xxx.example.com),通过返回带有该名称的 CNAME 记录实现。不设置任何类型的代理。这种类型需要 kube-dns 的 v1.7 或更高版本,或者 CoreDNS 的 0.8 或更高版本。

下面是针对Kubernetes中四种Service类型的YAML配置示例。

1.ClusterIP

    apiVersion: v1  
    kind: Service
    metadata:
    name: my-clusterip-service
    spec:
    selector:
    app: my-app
    ports:
    - protocol: TCP
    port: 80
    targetPort: 8080

    这个示例创建了一个名为my-clusterip-service的ClusterIP类型的Service,它会选择所有带有app=my-app标签的Pod,并将这些Pod的8080端口映射到Service的80端口上。

    2. NodePort

      apiVersion: v1  
      kind: Service
      metadata:
      name: my-nodeport-service
      spec:
      type: NodePort
      selector:
      app: my-app
      ports:
      - protocol: TCP
      port: 80
      targetPort: 8080
      nodePort: 30000

      这个示例创建了一个NodePort类型的Service,名为my-nodeport-service。除了具有ClusterIP的功能外,它还在每个节点上开放了一个30000的端口,通过NodeIP:30000可以访问Service。

      3. LoadBalancer

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

        这个示例创建了一个LoadBalancer类型的Service,名为my-loadbalancer-service。在支持LoadBalancer的公有云环境中,云提供商会自动为这个Service配置一个负载均衡器,并将流量转发到Service的NodePort上。

        4. ExternalName

          apiVersion: v1  
          kind: Service
          metadata:
          name: my-externalname-service
          namespace: default
          spec:
          type: ExternalName
          externalName: external.example.com

          这个示例创建了一个ExternalName类型的Service,名为my-externalname-service。它将Service的名称映射到一个外部域名external.example.com,使得集群内部可以通过这个Service名称来访问外部的域名。

          “运维笔谈”公众号,对话回复 “阿里云k8s” 可以获取 “阿里云Kubernetes项目实战手册”

          如果您在日常运维工作中遇到了任何问题或挑战,无论是关于系统配置、性能优化、故障排除还是其他方面,都欢迎您随时留言或私信我。我会尽我所能为您提供解决方案或建议。相互学习,积累更多的经验和知识,让工作更加顺畅高效!

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

          评论