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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录

一、认识 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 中一种特殊的 servicek8s 会在集群中的每一个节点上暴露一个相同的端口通过端口以及 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 还有一些其他功能如动态路由更新、安全认证、日志监控等。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: k8s