附录3:proxy.sh
#!/bin/bash #example:proxy.sh 192.168.41.42 #脚本后跟的位置参数1是node节点的IP地址。 NODE_ADDRESS=$1 #创建 kube-proxy 启动参数配置文件 cat >/opt/kubernetes/cfg/kube-proxy <<EOF KUBE_PROXY_OPTS="--logtostderr=true \ --v=4 \ --hostname-override=${NODE_ADDRESS} \ --cluster-cidr=172.17.0.0/16 \ --proxy-mode=ipvs \ --kubeconfig=/opt/kubernetes/cfg/kube-proxy.kubeconfig" EOF #--hostnameOverride: 参数值必须与 kubelet 的值一致,否则 kube-proxy 启动后会找>不到该 Node,从而不会创建任何 ipvs 规则 #--cluster-cidr:指定 Pod 网络使用的聚合网段,Pod 使用的网段和 apiserver 中指定的 service 的 cluster ip 网段不是同一个网段。 kube-proxy 根据 --cluster-cidr 判断集群内部和外部流量,指定 --cluster-cidr 选项后 kube-proxy 才会对访问 Service IP 的请求做 SNAT,即来自非 Pod 网络的流量被当成外部流量,访问 Service 时需要做 SNAT。 #--proxy-mode:指定流量调度模式为ipvs模式,可添加--ipvs-scheduler选项指定ipvs调度算法(rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq) #--kubeconfig: 指定连接 apiserver 的 kubeconfig 文件 #---------------------- #创建 kube-proxy.service 服务管理文件 cat >/usr/lib/systemd/system/kube-proxy.service <<EOF [Unit] Description=Kubernetes Proxy After=network.target [Service] EnvironmentFile=-/opt/kubernetes/cfg/kube-proxy ExecStart=/opt/kubernetes/bin/kube-proxy $KUBE_PROXY_OPTS Restart=on-failure [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable kube-proxy systemctl restart kube-proxy 复制代码
4.3 部署网络组件
网络插件主要两种:Flannel、Calico。安装其中任意一个即可。
我们这里使用方法二,安装Calico网络插件。
方法一:部署Flannel
#--------------在 node01 节点上操作--------------- #上传 cni-plugins-linux-amd64-v0.8.6.tgz 和 flannel.tar 到 /opt 目录中 cd /opt/ docker load -i flannel.tar docker images #解压 mkdir /opt/cni/bin tar zxvf cni-plugins-linux-amd64-v0.8.6.tgz -C /opt/cni/bin #传给node02节点 scp cni/ flannel.tar root@192.168.41.43:/root/ docker load -i flannel.tar #---------------在 master01 节点上操作----------------- #上传 kube-flannel.yml 文件到 /opt/k8s 目录中,部署 CNI 网络 cd /opt/k8s kubectl apply -f kube-flannel.yml kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE kube-flannel-ds-hjtc7 1/1 Running 0 7s kubectl get nodes NAME STATUS ROLES AGE VERSION 192.168.41.42 Ready <none> 81m v1.20.11 复制代码
方法二:部署 Calico
#--------------------在 master01 节点上操作--------------------------------- #calico.yaml 文件可以直接从网上获取,使用wget下载即可 #上传 calico.yaml 文件到 /opt/k8s 目录中,部署 CNI 网络 cd /opt/k8s vim calico.yaml #修改里面定义Pod网络(CALICO_IPV4POOL_CIDR),要与前面kube-controller-manager配置文件指定的cluster-cidr网段一致 - name: CALICO_IPV4POOL_CIDR value: "10.244.0.0/16" #默认是192.168.0.0/16,需要改成和kube-controller-manager配置文件指定的cluster-cidr网段一致 #通过calico.yaml资源清单,使用kubectl apply创建pod,-f指定清单文件 kubectl apply -f calico.yaml #等待1~2分钟,查看pod状态,-n指定命名空间,默认是default命名空间。都是Running状态就OK了。 kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE calico-kube-controllers-659bd7879c-gq5fb 1/1 Running 0 2m53s calico-node-dd4gc 1/1 Running 0 2m53s calico-node-rg299 1/1 Running 0 2m53s #再次查看集群的节点信息,都是Ready状态。 #等 Calico Pod 都 Running,节点也会准备就绪 kubectl get nodes NAME STATUS ROLES AGE VERSION 192.168.41.42 Ready <none> 73m v1.20.11 192.168.41.43 Ready <none> 74m v1.20.11 #至此,单master节点k8s集群就部署成功了 复制代码
网络异常,图片无法展示
|
网络异常,图片无法展示
|
网络异常,图片无法展示
|
网络异常,图片无法展示
|
4.4 部署 CoreDNS
CoreDNS:可以为集群中的 service 资源创建一个域名与 IP 的对应关系解析。
service发现是k8s中的一个重要机制,其基本功能为:在集群内通过服务名对服务进行访问,即需要完成从服务名到ClusterIP的解析。
k8s主要有两种service发现机制:环境变量和DNS。没有DNS服务的时候,k8s会采用环境变量的形式,但一旦有多个service,环境变量会变复杂,为解决该问题,我们使用DNS服务。
#---------------1、在所有 node 节点上操作----------------- #上传 coredns.tar 到 /opt 目录中,之后导入镜像 cd /opt docker load -i coredns.tar #---------------2、在 master01 节点上操作----------------- #上传 coredns.yaml 文件到 /opt/k8s 目录中,部署 CoreDNS cd /opt/k8s #通过coredns.yaml资源清单,使用kubectl apply创建该pod,-f指定清单文件 kubectl apply -f coredns.yaml #等待1~2分钟,查看pod状态,-n指定命名空间,默认是default命名空间。coredns是Running状态就OK了。 kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE coredns-6954c77b9b-r4lc6 1/1 Running 0 5m21s #DNS 解析测试 kubectl run -it --rm dns-test --image=busybox:1.28.4 sh If you don't see a command prompt, try pressing enter. / # nslookup kubernetes Server: 10.0.0.2 Address 1: 10.0.0.2 kube-dns.kube-system.svc.cluster.local Name: kubernetes Address 1: 10.0.0.1 kubernetes.default.svc.cluster.local / # 复制代码
1、在所有 node 节点上操作
网络异常,图片无法展示
|
2、在 master01 节点上操作
网络异常,图片无法展示
|
网络异常,图片无法展示
|
五、CNI网络插件介绍
5.1 Kubernetes的三种网络
网络异常,图片无法展示
|