专栏首页Jerry的SAP技术分享一个简单的例子理解Kubernetes的三种IP地址类型

一个简单的例子理解Kubernetes的三种IP地址类型

很多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端口向外界提供服务:

而我们通过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提供的服务了:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 请停止使用select *from查询

    1. 会不会是因为数据库索引是昨天刚加进去的,可能索引没生效?但是仔细一想,如果索引没生效应该查询全部数据都是一样的慢,但是为了以防万一,我还是使用了sql命令...

    用户1149268
  • 基于 Nginx 的动态代理

    在实际应用中,遇到了这样一个场景: 已有一个手机 APP 客户端,需要在该 APP 客户端中实现通过 Web 的形式接入其他的应用页面。按照常规的流程,在 ...

    用户1149268
  • Kubernetes 笔记 11 Pod 扩容与缩容 双十一前后的忙碌

    资源的伸缩在云计算环境中是至关重要的,云计算的动机就是企图提高资源的利用率,在用户请求高峰期的时候能够对资源进行横向扩容,反之,当用户请求回落低谷的时候,能够及...

    CloudDeveloper
  • 分布式项目中Nginx应用场景研究

    众所周知nginx一般有两个作用,一个是负载均衡、一个反向代理。但是自从接触了duubo+zookeeper(或者springcloud)之后,脑子里面就会有一...

    用户1149268
  • CentOS7安装IT资产管理系统Snipe-IT

    版权声明:本文为木偶人shaon原创文章,转载请注明原文地址,非常感谢。 https://b...

    shaonbean
  • Kubernetes 笔记 08 Deployment 副本管理

    Deployment 是 K8S v1.2 引入的概念,与之一起引入还有 ReplicaSet。这两个概念是等同的,准确说是 Deployment 内部调用 R...

    CloudDeveloper
  • ZABBIX 4.0 LTS 部署

    关于zabbix的详细使用可以参考之前的3.0 版本,该文档仅记录zabbix 4.0 编译安装过程! ZABBIX 3.0 从入门到精通(zabbix使用详解...

    惨绿少年
  • 多个 VUE 前端工程部署设置、nginx 代理配置

    版权声明:这可是本菇凉辛辛苦苦原创的,转载请一定带上我家地址,不要忘记了哈 . https://b...

    微风-- 轻许--
  • ELK学习笔记之Kibana安装配置

    Kibana 是一个开源的分析和可视化平台,是ELK的重要部分。Kibana提供搜索、查看和与存储在 Elasticsearch 索引中的数据进行交互的功能。开...

    Jetpropelledsnake21

扫码关注云+社区

领取腾讯云代金券