IPVS模式下,kube-proxy会在service创建后,在宿主机上添加一个虚拟网卡:
kube-ipvs0,并分配service IP
查卡每个节点都有:10.98.46.168 IP
[root@server2 manifest]# ip a | grep kube-ipvs0
9: kube-ipvs0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default
inet 10.96.0.1/32 brd 10.96.0.1 scope global kube-ipvs0
inet 10.96.0.10/32 brd 10.96.0.10 scope global kube-ipvs0
inet 10.98.46.168/32 brd 10.98.46.168 scope global kube-ipvs0
[root@server3 ~]# ip a | grep kube-ipvs0
58: kube-ipvs0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default
inet 10.96.0.10/32 brd 10.96.0.10 scope global kube-ipvs0
inet 10.96.0.1/32 brd 10.96.0.1 scope global kube-ipvs0
inet 10.98.46.168/32 brd 10.98.46.168 scope global kube-ipvs0
[root@server4 ~]# ip a | grep kube-ipvs0
41: kube-ipvs0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default
inet 10.96.0.1/32 brd 10.96.0.1 scope global kube-ipvs0
inet 10.96.0.10/32 brd 10.96.0.10 scope global kube-ipvs0
inet 10.98.46.168/32 brd 10.98.46.168 scope global kube-ipvs0
[root@server2 manifest]# cat service.yml
kind: Service
apiVersion: v1
metadata:
name: myservice
spec:
ports:
- protocol: TCP
port: 80
targetPort: 80
selector:
app: myapp
type: NodePort 更改类型
[root@server2 manifest]# cat pod2.yml
apiVersion: apps/v1
kind: Deployment
metadata:
# Unique key of the Deployment instance
name: deployment-example
spec:
# 3 Pods should exist at all times.
replicas: 4
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
# Apply this label to pods and default# the Deployment label selector to this value
app: myapp
spec:
containers:
- name: myapp
# Run this image
image: myapp:v1
[root@server2 manifest]# kubectl get svc 改为NodePort之后会有一个端口31891
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6d2h
myservice NodePort 10.110.8.176 <none> 80:31891/TCP 8m11s
更改通信模式为host-gw模式
查看通信原理:
10.244.1.0访问10.244.2.0:
通过ens33直接转发定向到server4主机IP上没有经过flannel封装
[root@server3 ~]# ip route
default via 192.168.1.1 dev ens33 proto static metric 100
10.244.0.0/24 via 172.25.254.2 dev ens33
10.244.1.0/24 dev cni0 proto kernel scope link src 10.244.1.1
10.244.2.0/24 via 172.25.254.4 dev ens33
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
172.25.254.0/24 dev ens33 proto kernel scope link src 172.25.254.3 metric 100
192.168.1.0/24 dev ens33 proto kernel scope link src 192.168.1.33 metric 100
[root@server4 ~]# ip route 同样的原理也是经过ens33网卡出去直接访问主机IP
default via 192.168.1.1 dev ens33 proto static metric 100
10.244.0.0/24 via 172.25.254.2 dev ens33
10.244.1.0/24 via 172.25.254.3 dev ens33
10.244.2.0/24 dev cni0 proto kernel scope link src 10.244.2.1
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
172.25.254.0/24 dev ens33 proto kernel scope link src 172.25.254.4 metric 100
192.168.1.0/24 dev ens33 proto kernel scope link src 192.168.1.44 metric 100
注意:必须二层网络互相连通。大多数情况下二层网络是不通的,都是三层通信