kubernetes(2)service、ingress、网络通信、calico

一、service

Service可以看作是一组提供相同服务的Pod对外的访问接口。借助Service,应用可以方便地实现服务发现和负载均衡。Service 是由 kube-proxy 组件,加上 iptables 来共同实现的。kube-proxy 通过 iptables 处理 Service 的过程,需要在宿主机上设置相当多的 iptables 规则,如果宿主机有大量的Pod,不断刷新iptables规则,会消耗大量的CPU资源。

开启kube-proxy的ipvs模式

在 ipvs 模式下,kube-proxy 监视 Kubernetes 服务和端点,调用 netlink 接口相应地创建 IPVS 规则, 并定期将 IPVS 规则与 Kubernetes 服务和端点同步。 该控制循环可确保IPVS 状态与所需状态匹配。访问服务时,IPVS 将流量定向到后端Pod之一。

IPVS代理模式基于类似于 iptables 模式的 netfilter 挂钩函数, 但是使用哈希表作为基础数据结构,并且在内核空间中工作。 这意味着,与 iptables 模式下的 kube-proxy 相比,IPVS 模式下的 kube-proxy 重定向通信的延迟要短,并且在同步代理规则时具有更好的性能。 与其他代理模式相比,IPVS 模式还支持更高的网络流量吞吐量。

所有节点中  yum install -y ipvsadm

将模式改为ipvs

[root@server2 ~]# kubectl -n kube-system edit cm kube-proxy 

    mode: "ipvs"

 

更新,就是删除之前的重新建立

[root@server2 ~]#  kubectl get pod -n kube-system |grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}'

查看策略

IPVS 提供了更多选项来平衡后端 Pod 的流量。 这些是:

rr:轮替(Round-Robin)
lc:最少链接(Least Connection),即打开链接数量最少者优先
dh:目标地址哈希(Destination Hashing)
sh:源地址哈希(Source Hashing)
sed:最短预期延迟(Shortest Expected Delay)
nq:从不排队(Never Queue)

创建service:(ClusterIP方式)

[root@server2 ~]# mkdir service
[root@server2 ~]# cd service/
[root@server2 service]# vim clusterip.yml
apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  ports:
    - name: http
      port: 80
      targetPort: 80
  selector:
    app: myapp
  type: ClusterIP

创建副本

[root@server2 ~]# cd pod/
[root@server2 pod]# ls
pod.yml
[root@server2 pod]# vim deploy.yml
[root@server2 pod]# cat deploy.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-myapp
  labels:
    app: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v1

[root@server2 pod]# kubectl apply -f deploy.yml 
deployment.apps/deployment-myapp created

 IPVS模式下,kube-proxy会在service创建后,在宿主机上添加一个虚拟网卡:kube-ipvs0,并分配service IP

 kube-proxy通过linux的IPVS模块,以rr轮询方式调度service中的Pod。 

 

curl IP

无头服务

Headless Service不需要分配一个VIP,而是直接以DNS记录的方式解析出被代理Pod的IP地址。

[root@server2 service]# kubectl delete pod demo
[root@server2 service]# kubectl delete -f clusterip.yml 
[root@server2 service]# vim clusterip.yml 
kind: Service
metadata:
  name: nginx-svc
spec:
  ports:
    - name: http
      port: 80
      targetPort: 80
  selector:
      app: nginx
  clusterIP: None

[root@server2 service]# kubectl apply -f clusterip.yml 
service/web-service created
[root@server2 service]# kubectl get svc

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值