k8s service资源

发布时间 2023-05-10 11:09:25作者: 哪都通临时工


在Kubernetes中,Service资源是一种抽象的逻辑概念,它定义了一组Pod的访问方式,为Pod提供稳定的DNS名称和IP地址,通过代理(Proxy)的方式向应用程序终端用户提供可靠的访问。

Service资源对象提供了以下功能:

  1. 为一组具有相同功能但可能在不同Pod或节点中的Pod提供一个稳定的虚拟IP地址和DNS名称。
  2. 负责流量负载均衡,实现将请求分配到后端Pod上的算法。
  3. 可以控制访问Kubernetes服务的入口和出口。

Service资源类型

Service资源对象有四种类型:ClusterIP、NodePort、LoadBalancer、ExternalName。

  1. ClusterIP类型:创建一个虚拟IP地址,供集群内部其他Pod或Service使用,实现同一namespace内部的服务访问。创建样例如下:

    apiVersion: v1
    kind: Service
    metadata:
      name: myservice
    spec:
      selector:
        app: MyApp
      ports:
      - name: http
        protocol: TCP
        port: 80
        targetPort: 8080
      type: ClusterIP

     

  2. NodePort类型:映射一个固定端口到Service的一个端口上,实现集群外部对服务的访问。通过此类型可以实现对集群内部某个服务的暴露。创建样例如下:

    apiVersion: v1
    kind: Service
    metadata:
      name: myservice
    spec:
      selector:
        app: MyApp
      ports:
      - name: http
        protocol: TCP
        port: 80
        targetPort: 8080
      type: NodePort

     

  3. LoadBalancer类型:在Cloud Provider上创建一个负载均衡器,将Service的请求流量分发到后端Pod上。只有按需云(例如AWS、Azure等)支持的类型,适用于云环境。创建样例如下:

    apiVersion: v1
    kind: Service
    metadata:
      name: myservice
    spec:
      selector:
        app: MyApp
      ports:
      - name: http
        protocol: TCP
        port: 80
        targetPort: 8080
      type: LoadBalancer

     

  4. ExternalName类型:映射一个Service到其他的DNS服务器上,主要用于访问集群外的服务。创建样例如下:

    apiVersion: v1
    kind: Service
    metadata:
      name: my-database
    spec:
      type: ExternalName
      externalName: database.example.com

     

kube-proxy代理模型

kube-proxy是Kubernetes集群用于实现问请求代理到后端的Pod的一个组件。kube-proxy提供的代理模型包括三种:userspace、iptables和ipvs。

  1. userspace模型:kube-proxy将Service的请求流量通过userspace进程进行转发。当userspace进程接收到请求后,会将请求转发至后端的Pod。这种模型具有广泛的兼容性,并且稳定性较高,因为这种代理模型需要在用户空间和内核之间切换,其性能比其他代理模型略低;在Kubernetes 1.2版本之前,userspace是默认的代理模型

  2. iptables模型:创建Service对象的操作会触发kube-proxy创建相应的iptables规则来代理Service的请求。这种模型的性能比userspace模型更高。iptables模型是Kubernetes 1.2版本以后默认使用的代理模型;

  3. ipvs模型:kube-proxy使用ipvs代理后端Pod的请求,可以实现更高效的负载均衡功能。ipvs模型需要安装ipvs和ipset两个工具包,并且在内核中需要开启ipvs模块,因此相对来说安装和配置较为复杂,但具有非常高的性能。

在实际的生产环境中,用户可以根据实际的需求选择不同的代理模型,以满足不同的性能和可靠性要求。除此之外,kube-proxy还支持设置其他参数来优化代理性能、实现会话保持等功能。