很多Kubernetes的初学者对Kubernetes里面三种不同的IP地址和工作机制理解得不是很清楚。

本文我们通过一个最简单的例子来学习。

用如下命令行创建一个基于nginx的deployment:

kubectl run nginx --image=nginx:maxline

用kubectl get deploy查看成功生成的名为nginx的deployment:

此时这个deployment里的nginx pod还无法对外界提供服务。

我们创建一个service让外界能够消费。使用命令行创建这样的一个service:

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

type的类型选择为LoadBalancer, --port指定的是80端口,意思是这个service对外界暴露出来的服务端口是80,--target-port=80,这个端口是pod内部的nginx docker容器提供服务的工作端口,默认为80。这里实际上建立了向外界开发的80端口同nginx容器内部端口的一个映射关系。

执行完毕后,我们调用下面的命令行,看到了创建的service的Cluster IP和External IP。

其中external IP很好理解,这个service通过external IP加上我们前面介绍的被映射到80端口向外界提供服务:

浏览器里输入External IP http://35.241.173.27:80, 能成功访问nginx服务器的index.html:

而我们通过Service的Cluster IP是无法访问这个Service提供的功能的。

我们知道Kubernetes里的所有pod都可以彼此通信,而不需要通过网络地址转换(Network Address Translation-NAT),所有的节点也可以与所有的pod通信。而Service的Cluster IP,是一个内部的IP地址,专门用于同Cluster内部的节点或者pod通信。同外界通信,还是通过External IP进行。

NodePort

再试试NodePort。

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

注意看下图的PORT栏下面显示的类型为NodePort的端口:31375

这个端口号是Kubernetes expose命令自动生成的,范围在30000到32767之间。如果需要修改,可以编辑api server的配置文件:/etc/kubernetes/apiserver:

有了这个端口号,我们随便使用一个node的IP地址,后面拼接上:31375即是外部可以消费的完整地址。

使用命令行kubectl get nodes -o wide, 在结果里选择任意节点的External-IP,后面加上:31375:

测试:

测试通过。

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提供的服务了:

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

k8s 查看ip地址属于哪个pod_一个简单的例子理解Kubernetes的三种IP地址类型相关推荐

  1. java继承类型转换_#java 一个简单的例子理解java继承、成员函数重写、类型转换...

    一个简单的例子理解java继承.成员函数重写.类型转换 1.继承简介 举一个简单的例子:笔分为很多种,比如毛笔.钢笔.圆珠笔等等,这些笔都有一些相同的属性比如长度.笔迹的粗细等等:但他们也有不同的特点 ...

  2. Django入门超easy系列(一)——— 从一个简单的例子入门

    从一个简单的例子初识Django 当下最火的语言-Python和当下最火的Web开发框架-Django会擦出怎么样的火花!? 前言 我从去年十月份开始跟公司大佬学习Django,在本系列总结自己学习D ...

  3. 一个服务器同时运行多个网站三种方式

    一个服务器同时运行多个网站三种方式有三种方式:1.IP一样,端口不一样 2.端口一样IP不一样 3.端口一样,IP一样,绑定的域名不一样 第一种最简单,只需要在新建网站的时候修改端口,一般改为8080 ...

  4. IPVS -三种IP负载均衡技术与八种调度算法

    三种IP负载均衡技术        在调度器的实现技术中,IP负载均衡技术是效率最高的.在已有的IP负载均衡技术中有通过网络地址转换(Network Address Translation)将一组服务 ...

  5. 三种IP核总线接口比较分析

    三种IP核总线接口比较分析 (2018-01-13 09:26:44) 转载▼ 标签: 三种IP核总线接口比较分析   原文地址:三种IP核总线接口比较分析作者:Stephen 作者:王智鸣  田金文 ...

  6. 一个简单的例子,学习自定义注解和AOP

    转载自   一个简单的例子,学习自定义注解和AOP 记得今年年初刚开始面试的时候,被问的最多的就是你知道Spring的两大核心嘛?那你说说什么是AOP,什么是IOC?我相信你可能也被问了很多次了. 1 ...

  7. 量子运算 简单通俗例子_什么是量子计算机? 用一个简单的例子解释。

    量子运算 简单通俗例子 by YK Sugi 由YK Sugi 什么是量子计算机? 用一个简单的例子解释. (What is a quantum computer? Explained with a ...

  8. 跨站脚本功攻击,xss,一个简单的例子让你知道什么是xss攻击

    跨站脚本功攻击,xss,一个简单的例子让你知道什么是xss攻击 一.总结 一句话总结:比如用户留言功能,用户留言中写的是网页可执行代码,例如js代码,然后这段代码在可看到这段留言的不同一户的显示上就会 ...

  9. 一个简单的例子解释什么是量子计算机

    大家好! 前几天,我访问了加拿大温哥华的D-Wave Systems.这是一家制造尖端量子计算机的公司. 我在那里学到了很多关于量子计算机的知识,所以我想在这篇文章中与你们分享我在那里学到的一些东西. ...

最新文章

  1. 分布式事务,阿里为什么钟爱TCC
  2. 学习CSS了解单位em和px的区别
  3. PIL image.fromarray()函数
  4. 区别和联系_动机与主题的区别与联系
  5. java php 等,路径 上级路径,上上级路径表示方法
  6. An invalid form control with name='timeone[]' is not focusable.
  7. 现代图论笔记(二)树与二分图
  8. 安卓逆向系列教程 4.13 MagSearch 1.8 爆破
  9. Android About ContentProvider
  10. ios如何清理缓存?
  11. 敏捷开发“松结对编程”系列之七:问题集之一
  12. java 导出word 表格里写多行内容_论文Tips || 宅家写论文干货来了!是时候重启真正的论文了!...
  13. mysql数据库 怎么替换_mysql数据库替换
  14. AdventureWorks2012.mdf的使用
  15. 【Pygame实战】超有趣的泡泡游戏来袭——愿你童心不泯,永远快乐简单哦~
  16. 安装wget 、 wget命令
  17. 为赚快钱,IT 程序员沦为新型电诈案“制刀者”
  18. Android N开发 你需要知道的一切
  19. 嵌入式文件服务器,嵌入式文件服务器
  20. 【ROS】分布式系统【talkerlistener】(新增自定义名称)

热门文章

  1. mysql blackhole引擎_MySQL BlackHole引擎
  2. 利用ORB/AKAZE特征点进行图像配准
  3. 反调试技术揭秘(转)
  4. Python 包管理工具 pip 安装 和 使用
  5. js中立即执行函数会预编译吗_JavaScript预编译过程
  6. oracle sequence 不同 会话 不连续_序列 Sequence
  7. ulimit限制 新系统_Linux查看及修改系统的资源限制命令ulimit
  8. php ci model条件查询,php – CodeIgniter中的多条件WHERE子句
  9. java中no1_Java程序设计实验(NO.1).doc
  10. [spring boot] ------ 总结1