命令记不住

登陆

k8s 控制器网络 Service

Service控制器网络

1.存在的意义

解决Pod的动态变化,提供统一访问入口:

  • 防止Pod失联,准备找到提供同一个服务的Pod,服务发现
  • 定义一组Pod的访问策略,负责均衡

2.Pod与Service的关系

Service通过标签关联一组Pod

Service使用Iptables或者ipvs为一组Pod提供负载均衡能力

3.三种类型

  • ClusterIP

默认ClusterIP,分配一个稳定的IP地址,既VIP,只能在集群内部访问,type: ClusterIP

  • NodePort

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

访问地址:<任意NodeIP>:

端口范围:30000-32767

  • LoadBalancer

类似NodePort,在每一个节点上启用一个端口暴露服务,k8s会请求底层云平台上的负载均衡器,将每个Node的ip和port作为后端添加进去

4.代理模式

Service的底层实现主要有iptables和ipvs二种网络模式,决定了如何转发流量

1.修改ipvs网络模式

1.kubeadm方式修改ipvs模式:

# kubectl edit configmap kube-proxy -n kube-system
...
mode: “ipvs“
...
# kubectl delete pod kube-proxy-btz4p -n kube-system

注:

  • kube-proxy配置文件以configmap方式存储
  • 如果让所有节点生效,需要重建所有节点kube-proxy pod

2.二进制方式修改ipvs模式:

# vi kube-proxy-config.yml 
mode: ipvs
ipvs:
scheduler: "rr“
# systemctl restart kube-proxy

注:配置文件路径根据实际安装目录为准

2.访问流程
客户端 ->NodePort/ClusterIP(iptables/Ipvs负载均衡规则) -> 分布在各节点Pod
3.查看负载均衡规则:

• iptables模式iptables-save |grep

• ipvs模式ipvsadm -L -n

5.模式对比
  • iptables

• 灵活,功能强大

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

  • ipvs

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

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

5.DNS名称

CoreDNS:是一个DNS服务器,Kubernetes默认采用,以Pod部署在集群中,CoreDNS服务监视Kubernetes API,为每一个Service创建DNS记录用于域名解析

CoreDNS YAML文件:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dns/corednsClusterIP

A记录格式:..svc.cluster.local

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

实现跨namespace与Service通信

通过Service的ExternalName类型即可实现跨namespace名称空间与Service通信。

Service域名格式:(service name).(namespace).svc.cluster.local,其中 cluster.local 为指定的集群的域名

6.定义与创建

多端口Service定义:对于某些服务,需要公开多个端口

Service也需要配置多个端口定义,通过端口名称区分。

apiVersion: v1
kind: Service
metadata:
name: web
spec:
type: ClusterIP
ports:
  - name: http
    port: 80 
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443 
    protocol: TCP 
    targetPort: 443
  selector: 
    app: web

查看结果

#kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP          14d
web          ClusterIP   10.106.15.76     <none>        80/TCP,443/TCP   6s
推荐阅读