Kubernetes网络配置

mac2025-09-13  21

Kubernetes网络配置

在容器平台,Docker,Kubernetes,Mesos 容器网络解决方案 flannel,calico,weave。只要提供一个标准的接口,就能为同样满足该协议的所有容器平台提供网络功能,而 CNI (Container Network Interface)正是这样的一个标准接口协议。 CNI 的初衷是创建一个框架,用于在配置或销毁容器时动态配置适当的网络配置和资源。插件负责为接口配置和管理 IP 地址,并且通常提供与 IP 管理、每个容器的 IP 分配、以及多主机连接相关的功能。容器运行时会调用网络插件,从而在容器启动时分配 IP 地址并配置网络,并在删除容器时再次调用它以清理这些资源。

运行时或协调器决定了容器应该加入哪个网络以及它需要调用哪个插件。然后,插件会将接口添加到容器网络命名空间中,作为一个 veth 对的一侧。接着,它会在主机上进行更改,包括将 veth 的其他部分连接到网桥。再之后,它会通过调用单独的 IPAM(IP地址管理)插件来分配 IP 地址并设置路由。

在 Kubernetes 中,kubelet 可以在适当的时间调用它找到的插件,为通过 kubelet 启动的 pod进行自动的网络配置。

Kubernetes 中可选的 CNI 插件如下:

FlannelCalicoCanalWeave

这篇文章中我们使用Calico作为容器的网络连接解决方案。Calico 为容器和虚拟机提供了安全的网络连接解决方案,并经过了大规模生产验证(AWS在公有云和跨数千个集群节点中),可与 Kubernetes,OpenShift,Docker,Mesos,DC / OS 和 OpenStack 集成。

Calico 还提供网络安全规则的动态实施。使用 Calico 的简单策略语言,您可以实现对容器,虚拟机工作负载和裸机主机端点之间通信的细粒度控制。关于Calico的相关内容请参考官方文档。 接下来我们来安装Calico网络插件,执行如下命令:

#Master节点操作即可 kubectl apply -f https://docs.projectcalico.org/v3.10/manifests/calico.yaml #确认安装是否成功 watch kubectl get pods --all-namespaces # 需要等待所有状态为 Running,时间可能在3 - 5 分钟的样子 Every 2.0s: kubectl get pods --all-namespaces kubernetes-master: Fri Nov 1 09:16:21 2019 NAMESPACE NAME READY STATUS RESTARTS AGE kube-system calico-kube-controllers-6d85fdfbd8-ndw74 0/1 Pending 0 13s kube-system calico-node-2jltn 0/1 Init:0/3 0 13s kube-system calico-node-djlwv 0/1 Init:0/3 0 13s kube-system calico-node-jm6wf 0/1 Init:0/3 0 13s kube-system coredns-58cc8c89f4-4d684 0/1 Pending 0 2d9h kube-system coredns-58cc8c89f4-p7ht6 0/1 Pending 0 2d9h kube-system etcd-kubernetes-master 1/1 Running 0 2d9h kube-system kube-apiserver-kubernetes-master 1/1 Running 15 2d9h kube-system kube-controller-manager-kubernetes-master 1/1 Running 2 2d9h kube-system kube-proxy-45pz5 1/1 Running 0 2d9h kube-system kube-proxy-5qdj6 1/1 Running 1 8h kube-system kube-proxy-7xrlh 1/1 Running 0 31h kube-system kube-scheduler-kubernetes-master 1/1 Running 2 2d9h

至此,基本的环境已经部署完毕。

提示

在使用 watch kubectl get pods --all-namespaces 命令观察 Pods 状态时如果出现 ImagePullBackOff 无法 Running 的情况,请尝试使用如下步骤处理:

Master 中删除 Nodes:kubectl delete nodes <节点名称>Slave 中重置配置:kubeadm resetSlave 重启计算机:rebootSlave 重新加入集群:kubeadm join
附:常用Kubernetes命令
# 查看master装填 kubectl cluster-info # 检查nodes状态 kubectl get nodes # 检查组件运行状态 kubectl get cs # 运行容器实例,我们在这里运行nginx服务 # 使用 kubectl 命令创建两个监听 80 端口的 Nginx Pod(Kubernetes 运行容器的最小单元) kubectl run nginx --image=nginx --replicas=2 --port=80 # 查看全部pods状态 kubectl get pods # 查看自己部署的服务 kubectl get deployment # 映射服务让用户可以访问,这里我们映射的是nginx kubectl expose deployment nginx --port=80 --type=LoadBalancer # 查看已发布的服务 kubectl get services # 查看服务详情 kubectl describe service <服务名称> # 停止服务 kubectl delete deployment nginx kubectl delete service nginx
最新回复(0)