全栈工程师开发手册 (作者:栾鹏)
架构系列文章


在学习前要知道一个服务下可能有多个pod,每个pod可能在不同的主机上。一个主机可能有多个服务。而每个container又几乎模拟的是一个主机。所以不是只有主机才有ip和端口号。

容器网络实例

服务中的3个端口设置

这几个port的概念很容易混淆,比如创建如下service:

apiVersion: v1
kind: Service
metadata:labels:name: app1name: app1namespace: default
spec:type: NodePortports:- port: 8080targetPort: 8080nodePort: 30062selector:name: app1

port

即,这里的port表示:service暴露在cluster ip上的端口,<cluster ip>:port 是提供给集群内部客户访问service的入口。

nodePort

首先,nodePort是kubernetes提供给集群外部客户访问service入口的一种方式(另一种方式是LoadBalancer),所以,<nodeIP>:nodePort 是提供给集群外部客户访问service的入口。

targetPort

targetPort很好理解,targetPort是pod上的端口,从port和nodePort上到来的数据最终经过kube-proxy流入到后端pod的targetPort上进入容器。

port、nodePort总结

总的来说,port和nodePort都是service的端口,前者暴露给集群内客户访问服务,后者暴露给集群外客户访问服务。从这两个端口到来的数据都需要经过反向代理kube-proxy流入后端pod的targetPod,从而到达pod上的容器内。

kube-proxy与iptables

当service有了port和nodePort之后,就可以对内/外提供服务。那么其具体是通过什么原理来实现的呢?奥妙就在kube-proxy在本地node上创建的iptables规则。

Kube-Proxy 通过配置 DNAT 规则(从容器出来的访问,从本地主机出来的访问两方面),将到这个服务地址的访问映射到本地的kube-proxy端口(随机端口)。然后 Kube-Proxy 会监听在本地的对应端口,将到这个端口的访问给代理到远端真实的 pod 地址上去。

kube-proxy会在nat表里生成4个chain,分别如上所示(主要是从容器出来的访问,从本地主机出来的访问两方面)。

创建service以后,kube-proxy会自动在集群里的node上创建以下两条规则:
KUBE-PORTALS-CONTAINER
KUBE-PORTALS-HOST
如果是NodePort方式,还会额外生成两条:
KUBE-NODEPORT-CONTAINER
KUBE-NODEPORT-HOST

KUBE-PORTALS-CONTAINER

主要将由网络接口到来的通过服务集群入口:port的请求重定向到本地kube-proxy端口(随机端口)的映射,即来自本地容器的服务访问请求;

注:我认为,这种情况的网络包不可能来自外部网络,因为cluster ip是个virtual ip,外部网络中不存在这样的路由将该数据包发送到本机;所以该请求只能来自本地容器,从本地容器出来的访问,服务访问请求是通过本地容器虚拟网卡输入到本地网络接口的。

KUBE-NODEPORT-CONTAINER

主要将由网络接口到来的通过服务集群外部入口:nodePort的请求重定向到本地kube-proxy端口(随机端口)的映射;即来自k8s集群外部网络的服务访问请求,可以来自本机容器,也可以来自其他node的容器,还可以来自其他node的进程;

KUBE-PORTALS-HOST

主要将该node本地进程通过服务集群入口:port的请求重定向到本地kube-proxy端口(随机端口)的映射。

KUBE-NODEPORT-HOST

主要将该node本地进程通过服务集群外部入口:nodePort的请求重定向到本地kube-proxy端口(随机端口)的映射。

kube-proxy反向代理

不管是通过集群内部服务入口:port还是通过集群外部服务入口:nodePort的请求都将重定向到本地kube-proxy端口(随机端口)的映射,然后将到这个kube-proxy端口的访问给代理到远端真实的 pod 地址上去。

案例

另一个案例

总结

所以这里我们要知道的关于ip的东西。

我们部署k8s的服务器肯定不是只有一台主机。一般是多台主机在一个局域网里面。并能为外界提供一个或多个外网ip。所以每台主机会有局域网ip和外网ip。局域网ip为192.168.xx.xx,而外网ip在阿里云或华为云的控制台中可以看到。

而k8s中对外提供服务的资源为service。一个k8s集群可能有多个service,要么使用端口号进行区分,要么使用ip地址+端口号进行区分。在k8s里面,为每个service设置了集群ip。10.233.xxx.xxx:port

如果设置了service的ports属性type为nodeport,则请求每个服务器192.168.xx.xx上的nodePort端口号,都会映射到该service上。而service里面包含多个容器组,不同的容器组部署在不同的服务器上,在service里面服务器为node。服务内部,可能会读取node上的数据,所以一个服务里面也会为node分配ip。不同service内,同一个服务器代表的node,nodeip是不一样的。

kubernetes中port、target port、node port的对比分析,以及kube-proxy代理相关推荐

  1. 深度学习中常用的激活函数详解及对比分析(sigmoid)

    Sigmoid函数: 特性: 1.当变量值远离中心轴时,梯度几乎为0,在神经网络的反向传播过程中,链式求导导致经过sigmoid函数之后的梯度 很小,权重值更新较慢 2.计算机执行指数运算较慢 3.s ...

  2. 【转】DICOM:DICOM Print服务中PresentationContext协商之 MetaSOPClass与SOPClass对比分析!!!!!!!!

    转自:https://zssure.blog.csdn.net/article/details/45119841 背景: 最近项目中遇到的实际问题较多,且大多是较隐蔽的.不易被发现的错误.究其根源来看 ...

  3. 关于 Kubernetes中Service的一些笔记

    写在前面 学习K8s,整理记忆 博文内容涉及:K8s中通过Servie的实现的服务创建,服务发现,服务发布 以及Load balancer负载,Ingress7层路由负载等的实际Demo 陈平安说,& ...

  4. 制造与供应链中的人工智能行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)

    制造与供应链中的人工智能市场的企业竞争态势 该报告涉及的主要国际市场参与者有IBM.Microsoft.Oracle.Google.SAS.SAP SE.Siemens.Salesforce.Camb ...

  5. 中红外传感器行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)

    中红外传感器市场的企业竞争态势 该报告涉及的主要国际市场参与者有Daylight Solutions.Structured Materials Industries.Maxion Technologi ...

  6. 中红外激光行业调研报告 - 市场现状分析与发展前景预测

    中红外激光市场的企业竞争态势 该报告涉及的主要国际市场参与者有IMRA America Inc..Quantronix Corporation.Ekspla.Rofin-Baasel UK Ltd.. ...

  7. Kubernetes中的nodePort,targetPort,port的区别和意义

    1. nodePort 外部机器可访问的端口. 比如一个Web应用需要被其他用户访问,那么需要配置type=NodePort,而且配置nodePort=30001,那么其他机器就可以通过浏览器访问sc ...

  8. Kubernetes中的nodePort,targetPort,port的区别和意义(转)

    Kubernetes中的nodePort,targetPort,port的区别和意义(转) 原文https://blog.csdn.net/u013760355/article/details/701 ...

  9. usb serial port 驱动_tty初探 — uart驱动框架分析

    写在前面: 我们没有讲UART驱动,不过我们认为,只要系统学习了第2期,应该具备分析UART驱动的能力,小编做答疑几年以来,陆陆续续有不少人问到UART驱动怎么写,所以今天就分享一篇深度长文(1700 ...

最新文章

  1. c++ssh连接_一步步使SSH连接您的github仓库
  2. 2010年7月blog汇总:OpenTest、MetaModelEngine和敏捷个人
  3. 第一个android程序HelloWorld
  4. 北京超前布局通用人工智能 我国首个超大规模智能模型系统发布
  5. WebService入门Demo
  6. python实现交并比IOU
  7. UVA - 489 ​​​​​​​Hangman Judge
  8. 面试精讲之面试考点及大厂真题 - 分布式专栏 14 全面了解Kafka的使用与特性
  9. override和overload的小笔记
  10. 内向的人能做管理吗?
  11. 使用idea上传项目到gitHub
  12. 文件服务器 重复文件,ftp服务器校验重复文件
  13. 时间序列数据建模分析利器sktime初体验
  14. 【有利可图网】字体设计:英文字体的气质和选用详解(二)
  15. 【大数据语言】怎样利用Python爬虫,高效获取大规模数据
  16. win下使用curl
  17. python中reduce函数_reduce函数
  18. 在3D城市模型中添加不同的纹理
  19. halcon在图片上画几何形状并保存
  20. fgets函数的使用

热门文章

  1. python小白从哪来开始-老男孩python课程亮点在哪里?python小白
  2. 学python语言有前途吗-学习python的前景怎么样?
  3. win7系统启用与配置语音识别功能的操作方法
  4. 生活中的七个语音识别经典应用
  5. 3x3矩阵怎么求逆矩阵_表象变换的幺正算符怎么定义的? 为何说算符与态可以看作矩阵?...
  6. 使用批处理脚本(BAT)调用FFMPEG批量编码视频
  7. python自定义变量名有哪些_Python学习第161课——自定义变量和导出变量
  8. jquery 选择器 逗号
  9. python画太极八卦图_用布尔运算绘制一个太极八卦图
  10. 【NOI OpenJudge】【1.4】编程基础之逻辑表达式与条件分支