k8s 网络基础

Posted

tags:

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

参考技术A 重点关注containerPort,他与Pod IP组成了endpoint,Pod IP就是docker0网桥分配的IP,有pause容器拥有,Pod其他容器与pause容器公用一个network namespace。

关于containerPort有个问题,如果一个pod中有2个容器,2个容器暴露相同的port,为什么可以?两个容器应该是公用pause容器的网络协议栈,如果tcp来了,到底是访问哪个容器的里面的进程?

如果简单点想尽快从外部访问pod,就可以直接指定hostPort,一般不推荐。

这个问题需要理解pause,待解决

service的网络信息早期采用ENV管理,后期通过DNS系统,直接使用service name访问cluster ip。

设置clusterIP: None,自己做LB,而非k8s做LB,提供cluster IP,减少网络损耗。直接返回对应ep。

service通过label selector筛选合适的pod,然后post到同名的Endpoints对象,Endpoints对象保存Endpoint,即Pod IP + Container Port
[图片上传失败...(image-83ad0d-1536978807340)]

endpoints用法:

具体流程:

比如这里有个场景,batch服务的task多副本,一个task对应一个service,一个pod;那么如何对这些task多副本做一个统一的入口呢?我们可以在这些services上面再加一个serivce,然后手动创建对应的Endpoints,这里注意endpoint必须是pod ip,而不能是cluster ip,至于为什么暂时不清楚。

详见 services

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

[k8s系列六]K8S网络补充之DNS

k8s的Flannel网络

k8s网络之Flannel网络

Linux里面k8s有几种网络模式?

计算机网络-k8s网络

k8s之calico网络