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

举报
敬 之 发表于 2022/06/23 00:47:07 2022/06/23
【摘要】 目录 一、认识 Kubernetes 网络 二、外部网络如何访问 k8s 内部服务 1. NodePort 2. Load Balancer 3. Ingress 一、认识 Kubernetes 网络 Kubernetes 最底层的网络为节点网络,用来保证 k8s 集群的节点(master 和 worker、work...

目录

一、认识 Kubernetes 网络

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

1. NodePort

2. Load Balancer

3. Ingress


一、认识 Kubernetes 网络

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

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

那么在 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。 

2. Load Balancer

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

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

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

3. Ingress

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

文章来源: majinjian.blog.csdn.net,作者:Developer 小马,版权归原作者所有,如需转载,请联系作者。

原文链接:majinjian.blog.csdn.net/article/details/125377495

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。