k8s集群中有三类IP:

1:宿主机的物理网卡IP,比如192.168.255.*

2:cni创建的网卡的IP,比如172.16.*.*

3:虚拟的IP(即ClusterIP ,无法ping通,通过代理连接),172.19.*.*

如果在任何一台机器上查看网卡name能看到那么多网卡。如下图。

eth0是真实的网卡:IP段192.168.255.*

cni是k8s为了扁平化管理pod而创建的网卡,这里是172.16.1.1 那么其他节点可能就是172.16.2.1,172.16.3.1

其他看到很多veth的网卡实际上是跟cni网卡相连的。一个veth就代表一个pod,所以这个节点的pod ip就是172.16.1.*

不同节点的pod比如172.16.2.5->172.16.1.3是直接可以访问,底层实现的方式(隧道技术)可以不用太关注。

pod本身是没有状态的。也就是pod重启之后他的ip就发生了变化,所以这里引入了一个service作为服务访问的目标,service ip也是虚拟出的一个东西,比如起了一个nginx的pod,它关联了一个叫my-nginx的服务,那么以下是访问的一个流程。

1:任何一个pod访问my-nginx

2:从/etc/resolv.conf中配置的DNS服务器获取cluster ip地址。可以看到172.19.0.10这个作为DNS服务器,在集群安装的时候已经固定好了,在创建应用的时候会自动写入service 和cluster ip这样一个映射关系,那么pod就获得了my-nginx的cluster ip

3:k8s会在每个节点创建一个proxy的服务,由proxy创建iptable规则,当然在nginx创建的时候规则以及创建好了,当pod连接culster ip的时候就会被转发到nginx pod的ip,所以你通过service +port的形式连接有效,但是直接ping service是无法ping通的,iptable只实现的tcp/udp的转发

kubernetes service访问原理的更多相关文章

  1. Docker Kubernetes 服务发现原理详解

    Docker Kubernetes  服务发现原理详解 服务发现支持Service环境变量和DNS两种模式: 一.环境变量 (默认) 当一个Pod运行到Node,kubelet会为每个容器添加一组环境 ...

  2. 浅谈 kubernetes service 那些事(上篇)

    一.问题 首先,我们思考这样一个问题: 访问k8s集群中的pod, 客户端需要知道pod地址,需要感知pod的状态.那如何获取各个pod的地址?若某一node上的pod故障,客户端如何感知? 二.k8 ...

  3. 【爬坑系列】之解读kubernetes的认证原理&实践

    对于访问kube-apiserver模块的请求来说,如果是使用http协议,则会顺利进入模块内部得到自己想要的:但是如果是用的是https,则能否进入模块内部获得想要的资源,他会首先要进行https自 ...

  4. Kubernetes service 代理模式

    Kubernetes service 代理模式 底层流量转发与负载均衡实现:• Iptables(默认)• IPVS IPVS 了解代理模式之IPVS工作原理LVS 基于 IPVS内核调度模块实现的负 ...

  5. (七)Kubernetes Service资源

    Service概述 为什么要使用Service Kubernetes Pod是平凡的,由Deployment等控制器管理的Pod对象都是有生命周期的,它们会被创建,也会意外挂掉.虽然它们可以由控制器自 ...

  6. kubernetes如何访问pod服务

    一.通过 Service 访问 Pod: 我们不应该期望 Kubernetes Pod 是健壮的,而是要假设 Pod 中的容器很可能因为各种原因发生故障而死掉.Deployment 等 control ...

  7. 【解构云原生】初识Kubernetes Service

    编者按:云原生是网易杭州研究院(网易杭研)奉行的核心技术方向之一,开源容器平台Kubernetes作为云原生产业技术标准.云原生生态基石,在设计上不可避免有其复杂性,Kubernetes系列文章基于网 ...

  8. 第14 章 : Kubernetes Service讲解

    Kubernetes Service 本文将主要分享以下四方面的内容: 为什么需要 K8s service: K8s service 用例解读: K8s service 操作演示: K8s servi ...

  9. 通过 Service 访问 Pod - 每天5分钟玩转 Docker 容器技术(136)

    本节开始学习 Service.我们不应该期望 Kubernetes Pod 是健壮的,而是要假设 Pod 中的容器很可能因为各种原因发生故障而死掉.Deployment 等 controller 会通 ...

随机推荐

  1. TP3.2:实现Ajax无刷新上传图片

    1.基于TP3.2+ajaxfileupload进行无刷新上传图片,本次只上传一张,多张以后搞出来再发 2.效果:   3.html代码: <html> <head> < ...

  2. iOS 直播推流 - 搭建基于RTMP的本地Nginx服务器

    前端时间,公司要调研直播相关的内容,特地花时间进行了一番调研. 本篇将记录其中的推流篇-本地推理播放测试. 关于Nginx: 配置Nginx以支持HLS.RTMP的推流与拉流,iOS系统使用LFLiv ...

  3. NYOJ----次方求模

    次方求模 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 求a的b次方对c取余的值   输入 第一行输入一个整数n表示测试数据的组数(n<100)每组测试只有一 ...

  4. CentOS 6.7下配置 yum 安装 Nginx。

    第一步,在/etc/yum.repos.d/目录下创建一个源配置文件nginx.repo: cd /etc/yum.repos.d/ vim nginx.repo 填写如下内容: [nginx]nam ...

  5. webdriver API study

    This chapter cover all the interfaces of Selenium WebDriver. Recommended Import Style The API defini ...

  6. Java并发和多线程:序

      近期,和不少公司的"大牛"聊了聊,当中非常多是关于"并发和多线程"."系统架构"."分布式"等方面内容的.不少问题, ...

  7. oracle序列sequence操作汇总(命令)--待续

    1.创建sequence 2.删除sequence 3.查询有哪些sequence select * from user_objects where object_type='SEQUENCE'; 4 ...

  8. mysql (已解决p)MYSQL5.7启动不了,本地计算机上的 MySQL57 服务启动后停止。

    找到目录E:\AppServ\MySQL\data 备份data中的数据,然后删除掉data中所有的东西(如果删除不掉请在进程中找到mysqld.exe并且关闭) 打开CMD cd E:\AppSer ...

  9. git版本控制文件提交到composer应用市场,并下载用市场的软件库

    要把github中的项目提交到composer中去,必须在github管理的项目中新建对应的composer.json文件, composer.json文件建立的方法 cmd定位到项目目录 compo ...

  10. html input select等控件宽度对不齐?请使用box-sizing。

    今天终于明白为什么表单元素的宽度经常对不齐了,原来是计算的问题. 为元素设置:box-sizing: border-box;,则表明width的宽度为内容本身宽度+padding+border(高度一 ...