【云原生 • Kubernetes】认识 k8s 网络、外部网络访问 k8s 内部服务

【云原生 • Kubernetes】认识 k8s 网络、外部网络访问 k8s 内部服务Kubernetes 网络结构介绍 外部网络访问 k8s 内部服务的方法

【云原生 • Kubernetes】认识 k8s 网络、外部网络访问 k8s 内部服务

目录

一、认识 Kubernetes 网络

二、外部网络如何访问 k8s 内部服务

1. NodePort

2. Load Balancer

3. Ingress


一、认识 Kubernetes 网络

Kubernetes 最底层的网络为节点网络,用来保证 k8s 集群的节点(master 和 worker、worker 节点之间)能够做正常的 IP 寻址和通讯。

Kubernetes 第二层网络就是 Pod 网络,构建于节点网络之上,用来保证 k8s 集群中的 pod 之间能够做正常的 IP 寻址和通讯。作为集群最基本的调度单位,一个 Pod 内部可以有一个或多个容器,容器之间直接通过 localhost 互相访问;这些容器可共享 Pod 的网络栈,容器想要访问外部资源则通过此网络栈。如下为该两层的示意图:

【云原生 • Kubernetes】认识 k8s 网络、外部网络访问 k8s 内部服务

那么在 Pod 之间又是如何进行 IP 寻址和通讯的呢?

在 Kubernetes 集群当中,可以把每一个 Pod 看成是一个自带虚拟网卡的小型虚拟机。在节点网络的基础上,k8s 会创建一个专门为 Pod 寻址和访问服务的虚拟网络(即 Pod 网络),首先 k8s 会在每个节点之间创建虚拟网桥,并管理网桥的 IP 地址空间和分配,其次 k8s 会修改路由器的路由规则,使得不同节点上的 Pod 可以相互通信。

但是还有一个问题,那就是 Pod 在 k8s 中是不固定的,可能会挂起或者重启,且挂起重启都是不可预期的,那么这就会导致服务的 IP 也随着不停的变化,给用户的寻址造成一定的困难。在上文中我们也提到了解决此问题用到了服务 service。service 网络的实现也就是 Kubernetes 的第三层网络。

service 是由 k8s 单独创建和管理的,有独立的 IP 地址空间,它的 IP 称为 Cluster-IP。

二、外部网络如何访问 k8s 内部服务

要知道,Pod 网络和 service 网络都是 k8s 的内部网络,外部用户是无法访问的,而外部网络和 节点网络是可以互通的。那么如果能够实现节点网络和 service 网络的互通,就可以间接实现外部与 service 网络的互通了。

1. NodePort

NodePort 是一种将 Kubernetes 服务暴露在节点网络上的一种机制。其实就是 k8s 中一种特殊的 service,k8s 会在集群中的每一个节点上暴露一个相同的端口,通过端口以及 kube-proxy 转发服务让节点网络可以访问到 k8s 内部的 service。 

【云原生 • Kubernetes】认识 k8s 网络、外部网络访问 k8s 内部服务

2. Load Balancer

Node Port 将 k8s 中的服务暴露在节点网络中后,想要外部网络访问到节点网络进而访问到 k8s 中的服务还需要引入负载均衡设备,也就是 load balancer。

【云原生 • Kubernetes】认识 k8s 网络、外部网络访问 k8s 内部服务

load balancer 具有公网 IP,可以将外部流量转换路由到节点网络中,还能够实现对节点网络的负载均衡,以实现用户通过公网 IP 访问到 k8s 内部的服务。

load balancer 也是一种特殊的 service,本地 Kubernets 部署是不支持 load balances 的;公有云如阿里云等则是支持的,可以按需销毁和创建 load balancer。

3. Ingress

如果需要暴露在节点网络中的服务有很多,仅仅使用 load balancer 的话成本是很高的。Ingress 可以等价于反向代理或者网关,它的主要作用就是反向路由,它可以将多个 k8s 内部的服务同时暴露出去但仅需一个 load balancer。Ingress 还有一些其他功能如动态路由更新、安全认证、日志监控等。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/201614.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午9:00
下一篇 2026年3月20日 上午9:00


相关推荐

  • conda pip更新包的命令

    conda pip更新包的命令1.condacondaupdatename2.pippipinstall–upgradename

    2022年5月26日
    63
  • DHCP协议解析

    DHCP协议解析DHCP(DynamicHostConfigurationProtocol,动态主机配置协议)是IETF为实现IP的自动配置而设计的协议,它可以为客户机自动分配IP地址、子网掩码以及缺省网关、DNS服务器的IP地址等TCP/IP参数。了解DHCP工作过程可以帮助我们排除有关DHCP服务遇到的问题。DHCP协议是基于UDP层之上的应用,本文结合抓报所得数据分析DHCP协议实现原理一、

    2022年5月23日
    51
  • 几率大的JVM面试题(含答案)

    几率大的JVM面试题(含答案)其他类型面试题汇总目录 Java 校招极大几率出的面试题 含答案 汇总本章面试题如下 JVM 三大性能调优参数 JVM 几个重要的参数 JVM 调优 JVM 内存管理 JVM 的常见的垃圾收集器 垃圾收集器 GC 调优 MinorGC FullGC 触发条件 java 内存模型 Java 垃圾回收机制 jvm 怎样判断一个对象是否可回收 怎样的对象才能作为 GCrootOOM 说一下 怎么排

    2026年3月27日
    4
  • oracle数据文件恢复 步骤_oracle数据库文件扩展名

    oracle数据文件恢复 步骤_oracle数据库文件扩展名1、基于linux操作系统文件恢复条件:1、误强制删除linux下的数据文件(rm-rf)。2、未重启数据库或操作系统。3、数据库是归档模式恢复原理:句柄恢复文件–因为我们的操作系统是linux,当数据文件从操作系统级别被rm掉,但之前打开该文件的进程仍然持有相应的文件句柄,所以指向的文件仍然可以读写,并且该文件的文件描述符可以从/proc目录中获得。…

    2026年2月21日
    5
  • java数据库连接池有哪些_常用的数据库连接池

    java数据库连接池有哪些_常用的数据库连接池池(Pool)技术在一定程度上可以明显优化服务器应用程序的性能,提高程序执行效率和降低系统资源开销。这里所说的池是一种广义上的池,比如数据库连接池、线程池、内存池、对象池等。其中,对象池可以看成保存对象的容器,在进程初始化时创建一定数量的对象。需要时直接从池中取出一个空闲对象,用完后并不直接释放掉对象,而是再放到对象池中以方便下一次对象请求可以直接复用。其他几种池的设计思想也是如此,池技术的优势是…

    2025年12月12日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号