美文网首页
kubernetes资源对象之Service

kubernetes资源对象之Service

作者: 一舍 | 来源:发表于2020-03-26 17:53 被阅读0次

Service 是对一组提供相同功能的 Pods 的抽象,并为它们提供一个统一的入口。借助 Service,应用可以方便的实现服务发现与负载均衡。

Service 通过标签来选取服务后端。这些匹配标签的 Pod的IP和端口列表组成 endpoints。

Service 支持四种类型:

  • ClusterIP 默认,自动分配一个仅内部可以访问的虚拟 IP
  • NodePort 为 Service 在每台机器上绑定一个端口,通过 NodeIP:NodePort 来访问
  • LoadBalancer 借助 cloud provider 创建一个外部的负载均衡器实现
  • ExternalName 将服务通过 DNS CNAME 记录方式转发到指定的域名

Service 支持三种类型的协议:

  • TCP
  • UDP
  • SCTP

Kubernetes 最主要的哲学之一,是用户不应该暴露那些能够导致他们操作失败、但又不是他们的过错的场景。为了使用户能够为他们的Service选择一个端口号,我们必须确保不能有2个Service发生冲突,Kubernetes 通过为每个 Service 分配它们自己的 IP 地址来实现,即全局唯一的ClusterIP。

Service访问集群内部服务的方法:

apiVersion: v1
kind: Service
metadata:
  labels:
    run: nginx
  name: nginx
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
    name: http
  selector:
    run: nginx
  sessionAffinity: None
  type: ClusterIP

Service访问集群外部服务的方法,支持两种:

  • 自定义 Endpoints。 创建 Service 的时候,不指定 selector。创建与 service同名的 endpoints,在 endpoints 中设置外部服务的 IP 和端口
kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376
      name: http
---
kind: Endpoints
apiVersion: v1
metadata:
  name: my-service
subsets:
  - addresses:
      - ip: 1.2.3.4
    ports:
      - port: 9376
  • DNS 转发。 在 service 中指定 externalName,该服务不会被分配 Cluster IP,需要通过 service 的 DNS 来访问
kind: Service
apiVersion: v1
metadata:
  name: my-service
  namespace: default
spec:
  type: ExternalName
  externalName: my.database.example.com

集群外部服务访问Service的方法:

  • NodePort

  • Ingress Controller

  • Load Balancer

  • Custom Load Balancer

相关文章

网友评论

      本文标题:kubernetes资源对象之Service

      本文链接:https://www.haomeiwen.com/subject/fracuhtx.html