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

本文详细介绍了Kubernetes中Service的多种类型,包括ClusterIP、NodePort、Headless Service和ExternalName,重点讨论了kube-proxy的IPVS模式以及Service的网络通信。接着,讲解了Ingress服务,包括Ingress TLS配置和添加认证。此外,探讨了k8s网络通信,如Flannel的VXLAN模式和DR模式,以及Calico网络插件的特性。最后,展示了如何配置公有云k8s服务对外访问。
摘要由CSDN通过智能技术生成

一、service

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

1.开启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

[root@server2 ~]# kubectl get pod
[root@server2 ~]# kubectl get pod -n kube-system 
[root@server2 ~]# kubectl get all
[root@server2 ~]# kubectl delete svc liveness-http 
[root@server2 ~]# kubectl get svc
[root@server2 ~]# yum install -y ipvsadm
[root@server2 ~]# ipvsadm -ln
[root@server2 ~]# kubectl -n kube-system get pod

将模式改为ipvs ,然后更新(就是删除之前的重新建立)


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

 mode: "ipvs"

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

 查看策略

[root@server2 ~]# ipvsadm -ln

 查看其他节点策略:

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

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

[root@server2 ~]# kubectl get pod -n kube-system

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

 [root@server2 ~]# kubectl  -n kube-system describe svc kube-dns

IPVS模式下,kube-proxy会在service创建后,在宿主机上添加一个虚拟网卡:kube-ipvs0,并分配service IP。
[root@server2 ~]# ip addr

kube-proxy通过linux的IPVS模块,以rr轮询方式调度service中的Pod。
[root@server2 ~]# ipvsadm -ln

2.创建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 service]# kubectl apply -f clusterip.yml 
service/web-service created
[root@server2 service]# kubectl get svc
[root@server2 service]# ip addr
[root@server2 service]# ipvsadm -ln

  创建副本:

[root@server2 ~]# cd pod/
[root@server2 pod]# ls
cronjob.yml  daemonset.yaml  deploy.yaml  job.yml  pod1.yml  pod.yml
[root@server2 pod]# cat deploy.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
  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.yaml 
deployment.apps/myapp-deployment created
[root@server2 pod]# kubectl get pod

[root@server2 service]# kubectl get pod --show-labels
[root@server2 service]# kubectl describe svc web-service 

 curl IP

[root@server2 service]# kubectl get pod -n kube-system
[root@server2 service]# kubectl get svc -n kube-system

[root@server2 service]# kubectl run -it demo --image=busyboxplus

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

3.无头服务

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

[root@server2 service]# ls
clusterip.yml
[root@server2 service]# kubectl delete -f clusterip.yml 
service "web-service" deleted
[root@server2 service]# vim clusterip.yml 
apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  p
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值