k8s之PodIP、ClusterIP和ExternalIP

k8s之PodIP、ClusterIP和ExternalIP - yuxi_o - 博客园https://www.cnblogs.com/embedded-linux/p/12657128.html

关注公众号 风色年代(itfantasycc) 300G微服务资料等你拿!

Pod IP

Kubernetes的最小部署单元是Pod。利用Flannel作为不同HOST之间容器互通技术时,由Flannel和etcd维护了一张节点间的路由表。Flannel的设计目的就是为集群中的所有节点重新规划IP地址的使用规则,从而使得不同节点上的容器能够获得“同属一个内网”且”不重复的”IP地址,并让属于不同节点上的容器能够直接通过内网IP通信。

每个Pod启动时,会自动创建一个镜像为gcr.io/google_containers/pause:0.8.0的容器,容器内部与外部的通信经由此容器代理,该容器的IP也可以称为Pod IP。

Service ClusterIP

Service是Kubernetes最核心的概念,通过创建Service,可以为一组具有相同功能的容器用用提供一个统一的入口地址,并且将请求进行负载分发到后端的各个容器应用上。

Pod IP 地址是实际存在于某个网卡(可以是虚拟设备)上的,但没有网络设备为Service Cluster IP负责。

它是由kube-proxy使用Iptables规则重新定向到其本地端口,再均衡到后端Pod的。这个地址从我们启动API的service-cluster-ip-range参数(旧版本为portal_net参数)指定的地址池中分配,比如–service-cluster-ip-range=10.0.0.0/16。假设这个Service的端口是1234。集群内的所有kube-proxy都会注意到这个Service。当proxy发现一个新的service后,它会在本地节点打开一个任意端口,建相应的iptables规则,重定向服务的IP和port到这个新建的端口,开始接受到达这个服务的连接。

当一个客户端访问这个service时,这些iptable规则就开始起作用,客户端的流量被重定向到kube-proxy为这个service打开的端口上,kube-proxy随机选择一个后端pod来服务客户。这个流程如下图所示:

根据Kubernetes的网络模型,使用Service Cluster IP和Port访问Service的客户端可以坐落在任意代理节点上,只能Cluster内部访问。外部要访问Service,我们就需要给Service外部访问IP。

External IP

外部访问Service的方式有两种:

1)通过设置nodePort映射到物理机,同时设置Service的类型为NodePort。

2)通过设置LoadBalancer映射到云服务上提供的LoadBalancer地址。这种用法仅用于公有云服务提供商的云平台设置Service的场景。对该Service的请求将会通过LoadBalancer转发到后端Pod上,负载分发的实现方式则依赖于云服务商提供的LoadBalancer的实现机制。

示例:

创建一个基于nginx的deployment

kubectl run nginx --image=nginx:maxline

ExternalIP方式提供外部Service服务(包含Cluster IP和External IP)

kubectl expose deployment nginx --type=LoadBalancer --port=80 --target-port=80

type的类型选择为LoadBalancer, --port指定的是80端口,意思是这个service对外界暴露出来的服务端口是80,--target-port=80,这个端口是pod内部的nginx docker容器提供服务的工作端口,默认为80。

kubectl get svc获取External IP和端口,通过External:port外部访问Service。

NodePort方式提供外部Service服务

kubectl expose deployment nginx --type=NodePort --port=80 --target-port=80

kubectl get svc获取nodePort端口, 随便使用任意一个node的external IP地址+nodePort端口外部访问Service。

附:Pod的端口转发功能

有时我们出于测试的目的,需要一种简单的办法查看一个pod是否能正常提供服务。如果每次通过kubectl的方式创建service就太麻烦了。

这里介绍一种简单的办法:pod的端口转发功能(port forward)。

比如我们想测试下图get pods返回的第一个pod的功能,名称为nginx-6f754dd4b9-74jdn:

执行命令行 kubectl port-forward pod/nginx-6f754dd4b9-74jdn 8080:80

看到提示信息Forwarding from 127.0.0.1:8080 -> 80, 意思是把当前主机的8080端口映射到nginx pod的80工作端口:

最后,就能够通过localhost:8080直接访问nginx pod提供的服务了。

 关注公众号 风色年代(itfantasycc) 300G微服务资料等你拿!

参考:

1. Kubernetes中的PodIP、ClusterIP和外部IPhttps://www.2cto.com/net/201702/595150.html

2. 一个简单的例子理解Kubernetes的三种IP地址类型https://www.jianshu.com/p/a45dca185afb

k8s之PodIP、ClusterIP和ExternalIP相关推荐

  1. k8s中Service ClusterIP ping不通?

    一. Service的类型 先来看看<kubernetes权威指南>中对Service类型的介绍: ClusterIP:kubernetes默认会自动设置Service的虚拟IP地址,仅可 ...

  2. k8s service:ClusterIP、NodePort、LoadBalancer、ExternalName

    ClusterIP Deployment.yaml service.yaml ipvsadm -Ln headless service dig需要安装bind-utils NodePort 30715 ...

  3. k8s Service之ClusterIP示例

  4. [kubernetes] kubectl proxy 让外部网络访问K8S service的ClusterIP

    使用kubectl proxy命令就可以使API server监听在本地的8001端口上: $ kubectl proxy --port=8009 Starting to serve on 127.0 ...

  5. k8s集群ClusterIP不能使用

    原因:iptables没有具体的设备响应,kube-proxy需要使用--proxy-mode=ipvs [root@kubernetes bak4]# kubectl get pods -n kub ...

  6. k8s中hostname, hosts文件, DNS和代理问题, service和pod的访问问题

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 验证一个域名的ip地址可以使用 nslookup xx.xx..xx 在kubernets中不同命名空间的服务相互访问 涉及到的是Pod和Servic ...

  7. k8s - Service ExternalName

    类型ExternalName 类型为 ExternalName 的服务将服务映射到 DNS 名称,而不是典型的选择器,例如 my-service 或者 cassandra. 您可以使用 spec.ex ...

  8. 二进制安装部署 4 kubernetes集群---超详细教程

    二进制安装部署kubernetes集群---超详细教程 前言:本篇博客是博主踩过无数坑,反复查阅资料,一步步搭建完成后整理的个人心得,分享给大家~~~ 本文所需的安装包,都上传在我的网盘中,需要的可以 ...

  9. Kubernetes Service详解(概念、原理、流量分析、代码)

    Kubernetes Service详解(概念.原理.流量分析.代码) 作者: liukuan73 原文:https://blog.csdn.net/liukuan73/article/details ...

最新文章

  1. python3.6.0安装教程-centos6.9安装python3.6.0和模块
  2. hdu1280 前m大的数(数组下标排序)
  3. C++的cout高阶格式化操作
  4. 《Photoshop修色圣典(第5版)》目录—导读
  5. QR码与DM码的对比
  6. 因子分析法基于matlab,因子分析matlab
  7. 如何创建桌面快捷方式
  8. 京东后台:订单履约系统设计(下)
  9. [转]出现蓝屏代码stop ** 0x000000a5(0x00000001,0x89758d98,0x000000000,0x00000000)
  10. matlab地震p波,如何确定地震深度?试试远震P波
  11. easyExcel工具
  12. 全球及中国墙绘机行业运营模式及市场供需预测报告2022-2028年
  13. android日期分组相册,按时间分类的自定义相册
  14. Android教程 -06 Activity的生命周期
  15. 21秋期末考试工程项目管理10324k2 (2)
  16. 基于Dockerfile制作镜像
  17. oracle大数据量删除方案
  18. 如何使用云信通短信发送生日祝福短信(自动发送哦)
  19. SEO究竟是什么?SEO的相关基础概念介绍
  20. Mock测试工具比较

热门文章

  1. linux锁定系统时间设置,Linux时间设置系统时间、硬件时间和时间服务
  2. python构建知识库_Python学习知识库
  3. 判断输入几位数的正则_判断是几位数,并逆向输出此数的程序算法和说明
  4. python从入门到实践课后题_Python 从入门到实践 函数篇 8-6-8习题
  5. PCL最小二乘法进行平面拟合原理
  6. 计算机数据传输和信号传输,职称计算机基础知识第1章:数据传输的编码和调制技术...
  7. channelinactive触发后不关闭channel_Go语言 | goroutine不只有基础的用法,还有这些你不知道的操作...
  8. haproxy高可用
  9. 杀鸡儆猴!苹果撤销Facebook的iOS企业证书
  10. 从Discuz迁移帐号密码到NodeBB