k8s 网络三

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s 网络三相关的知识,希望对你有一定的参考价值。

参考技术A k8s网络包括网络模型、CNI、Service、Ingress、DNS。
k8s的容器网络关注两点:IP地址分配,路由。

k8s的网络依赖于docker,docker的网络需要linux内核特性的支持。

1 每个Pod除了创建时指定的容器外,都有一个kubelet启动时指定的基础容器。
2 kubelet创建基础容器,生成network namespace。
3 kubelet调用网络CNI driver,由它根据配置调用具体的CNI 插件。
4 CNI 插件给基础容器配置网络。
5 Pod 中其他的容器共享使用基础容器的网络。

Ingress是HTTP方式的路由转发机制,即是7层负载均衡器,由Ingress Controller和HTTP代理服务器组成。Ingress Controller实时监控k8s API,实时更新HTTP代理服务器的转发规则。HTTP代理服务器有GCE Load-Balancer、HaProxy、nginx等方案。ingress controller在转发客户端请求到后端服务时,将跳过kube-proxy提供的4层负载均衡器的功能,直接转发到service的后端pod(endpoint)。

对于需要为k8s集群外的客户端提供服务的service,可以通过ingress将服务暴露出去。

网络策略是基于pod源ip(因此k8s网络不能随便做SNAT)的访问控制列表,限制pod之间的访问。
网络策略作为pod网络隔离的一层抽象,用白名单实现了访问控制列表,从label selector、namespace selector、端口、CIDR这4个维度限制pod的流量进出。

ingress限制进入的流量,egress限制外出的流量。

完成从服务名到clusterIP的解析。
DNS服务经历从skyDNS到kubeDNS再到coreDNS的过程。k8s通过Add-On增值包的方式引入DNS系统,把服务名作为dns域名。程序就可以直接使用服务名来建立通信连接。

从容器发出的数据包先到达br0,然后交给host机器的协议栈,由于目的IP是外网,且host主机开启了IP forward功能,数据包会通过eth0发出。因容器分配的网段都不在物理网络网段内,所以一般发出去之前先做NAT转换。(可以用iptables进行转换)
当涉及转发的目的IP地址是其他机器时,需要确保启用ip forward功能,即把linux当作交换机。

以上是关于k8s 网络三的主要内容,如果未能解决你的问题,请参考以下文章

k8s网络之设计与实现

k8s网络之Flannel网络

k8s网络通信(flannelcalico)

精句k8s资源管理概述

k8s三k8s集群的初始化

k8s三k8s集群的初始化