流量如何在 Kubernetes 集群内流动?



(在学习 Kubernetes 时,我从未真正找到任何好的资源来解释这一点(

场景:
我拥有 mywebsite1.com 和 mywebsite2.com,我想将它们都托管在 Kubernetes 集群中。

我根据以下网站部署了一个通用的云入口控制器,其中包含 2
个 kubectl apply -f命令。 (mandatory.yaml 和 generic ingress.yaml(
https://kubernetes.github.io/ingress-nginx/deploy/

所以问题是这种架构是什么样的?数据如何流入集群?

我将 2 个证书转换为 2 个 .key 和 2 个 .crt 文件
我使用这些文件制作 2 个 TLS 机密(每个网站 1 个,以便启用 HTTPS(

我创建了 2 个入口对象:

  • 一个说 website1.com/,指向一个名为website1fe的服务,并引用网站1的HTTP/TLS证书密钥。
    (网站 1fe 服务仅侦听 80 端口,并将流量转发到 website1fe 部署生成的 Pod(

  • 另一个说 website2.com/,指向一个名为website2fe的服务,并引用网站2的HTTPS/TLS证书密钥。
    (website2fe 服务只监听 80 端口,并将流量转发到 website2fe 部署生成的 pod(

我有一个存在于私有子网中的 3 节点 Kubernetes 集群。
他们有知识产权

10.1.1.10     10.1.1.11     10.1.1.12

当我运行 2
kubectl apply -f命令时,这些命令
生成:

  • 一个包含运行 Nginx L7 LB 软件的 pod 的 kubernetes 部署,它根据存储在 etcd 中的 Ingress .yaml 对象以声明方式配置自己,因为 nginx L7 LB pod 是自我配置的,所以它们被称为入口控制器 Pod。(这些 NGINX 入口控制器 Pod 侦听端口 80 和 443
  • 负载均衡器类型的 Kubernetes 服务:负载均衡器类型的 Kubernetes 服务,在后台使用 Nodeports,(当节点具有私有 IP 时,NodePort 可以安全使用,节点端口随机(注意:服务类型 LB 在后台使用 NodePorts,并且会随机选择,云 API 会自动将云 LB 链接到正确的随机 NodePort。或者,您可以使用服务类型 NodePort 并获得显式选择 NodePort 的选项。从 30000 - 32767 范围内选择,但为了清楚起见,我会说 NodePort 服务正在侦听集群中每个节点的端口 30080 和 30443(,云 LB 会自动配置并使用公共 IP 地址存在于集群外部(使用默认设置(,它会自动将流量路由到入口控制器公开的 NodePort。(流量示例:LB:443 --> NP:30443 --> 入口控制器Pod:443 --> Grafana:3000(

kubectl get svc --all-namespaces
提供 L4 LB 的 IPv4 IP 地址(假设它是可公开路由的 IP 1.2.3.4(

由于我拥有两个域:我配置了互联网 DNS,以便 website1.com 和 website2.com 都指向 1.2.3.4

注意:入口控制器是云提供商感知的,因此它会自动执行以下反向代理/负载平衡配置:

L4LB 1.2.3.4:80 --(LB between)--> 10.1.1.10:30080, 10.1.1.11:30080, 10.1.1.12:30080
L4LB 1.2.3.4:443 --(LB between)--> 10.1.1.10:30443, 10.1.1.11:30443, 10.1.1.12:30443

KubeProxy 使得任何节点端口 30080 或 30443 上的请求在集群内转发到 Nginx L7 LB/入口控制器服务,然后将流量转发到 L7 Nginx LB Pod。
L7 Nginx LB Pod 终止* HTTPS 连接并将流量转发到侦听未加密端口 80 的 website1.com 和 website2.com 服务。
(没关系,它是未加密的,因为我们在集群中,没有人会嗅探流量。 (*请注意,有时 Cloud LB 会终止 HTTPS,然后通过明文端口 80 转发到入口控制器,但这还不错 b/c 明文发生在私有 IP 空间上( (Nginx L7 LB根据流量进入的L7(http://url(地址知道要转发到哪个内部集群服务/网站(


请注意要避免的错误: 假设 website1.com 想要访问 website2.com 上存在的一些资源

好吧,website2.com 实际上有 2 个 IP 地址和 2 个 DNS 名称。
website2fe.default.svc.cluster.local <-- 内部群集可解析 DNS 地址
website2.com <-- 外部解析 DNS 地址

而不是让网站 1 通过 website2.com 访问资源 您应该让网站 1 通过 website2fe.default.svc.cluster.local 访问资源 (这是更高效的路由(

相关内容

  • 没有找到相关文章

最新更新