8.1 Service存在的意义

  • 防止Pod失联(服务发现)

  • 定义一组Pod的访问策略(负载均衡)

8.2 为什么要使用Service

Kubernetes Pod`是平凡的,由`Deployment`等控制器管理的`Pod`对象都是有生命周期的,它们会被创建,也会意外挂掉。虽然它们可以由控制器自动重建或者滚动更新,但是重建或更新之后的`Pod`对象的IP地址等都会发生新的变化。这样就会导致一个问题,如果一组`Pod`(称为`backend`)为其它`Pod`(称为 `frontend`)提供服务,那么那些`frontend`该如何发现,并连接到这组`Pod`中的哪些`backend`呢? 这时候就用到了:`Service

示例说明为什么要使用Service

资源来解决此类问题。

8.3 Service实现原理

直接处理并响应一样。

协议栈的传输层。

对象会自动创建。

8.4 虚拟IP和服务代理

规则上。

之上的调度规则。

的原因之一。

。因userspace传输效率太低,不推荐使用,在1.1版本之前是默认转发策略,现在默认是iptables。

8.5 iptables代理模式

)。

对象之上。

Iptables:

  • 灵活,功能强大

  • 规则遍历匹配和更新,呈线性时延

8.6 ipvs代理模式

等。

IPVS:

  • 工作在内核态,有更好的性能

  • 调度算法丰富:rr,wrr,lc,wlc,ip hash...

8.7 Pod与Service的关系

  • 通过label-selector相关联

  • 通过Service实现Pod的负载均衡( TCP/UDP 4层)

8.8 Service三种类型

类型。

    pod ---> ClusterIP:ServicePort --> (iptables、ipvs)DNAT --> PodIP:containePort

    :在每个节点上启用一个端口来暴露服务,可以在集群外部访问。也会分配一个稳定内部集群IP地址。

    clietn --> <NodeIp>:<NodePort> --> (iptables、ipvs)DNAT --> <PodIP>:<ContainerPort>

    :与NodePort类似,在每个节点上启用一个端口来暴露服务。除此之外,Kubernetes会请求底层云平台上的负载均衡器,将每个Node([NodeIP]:[NodePort])作为后端添加进去。

8.9 将service代理模式改为IPVS

[root@k8s-admin ~]# kubectl get pod -n kube-system -o wide

[root@k8s-admin ~]# kubectl get pod -n kube-system -o wide

# grep ipvs /var/log/messages

[root@k8s-admin ~]# kubectl get deploy,pod,svc,ep -o wide

......

8.10 Service DNS名称

DNS服务监视Kubernetes API,为每一个Service创建DNS记录用于域名解析。

.svc.cluster.local

示例:my-svc.my-namespace.svc.cluster.local

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: busybox
  name: busybox
  namespace: default
spec:
  containers:
  - image: busybox:1.28.4
    name: bs
    command:
    - "ping"
    - "baidu.com"

相关文章: