Kubernetes集群内部的流量如何流动?

时间:2018-09-09 05:07:36

标签: kubernetes kubernetes-ingress nginx-ingress

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

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

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

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

1 个答案:

答案 0 :(得分:2)

我将2个证书转换为2个.key和2个.crt文件
我使用这些文件制作2个TLS秘密(每个网站1个,因​​此它们将启用HTTPS)

我创建了2个Ingress对象:

  • 一个表示website1.com/,指向名为website1fe的服务,并引用website1的HTTPS / TLS证书密钥。
    (website1fe服务仅在端口80上侦听,并将流量转发到由website1fe部署产生的Pod)

  • 另一个表示website2.com/,指向名为website2fe的服务,并引用website2的HTTPS / TLS证书机密。
    (website2fe服务仅侦听端口80,并将流量转发到由website2fe部署产生的Pod)

我有一个3节点Kubernetes集群,存在于私有子网中。
他们有IP

 10.1.1.10     10.1.1.11     10.1.1.12

当我跑2时
kubectl apply -f 命令
生成的命令:

  • Ingress Controller部署
  • 侦听端口80和端口443的ClusterIP类型的L7 Nginx LB服务
  • 侦听端口80和端口443的L7 Nginx LB部署
    (此部署中的Pod由入口控制器Pod管理/配置,这会将Pod配置为入口对象指定的所需状态)
  • NodePort类型的L7 Nginx LB服务(从30000-32767的范围内随机选择,但为清楚起见,我将说NodePort服务正在侦听端口30080和30443)
  • 具有公共IP地址的L4 LB VM。

kubectl get svc --all-命名空间
提供L4 LB的IPv4 IP地址(假设为1.2.3.4)

由于我同时拥有两个域:我配置了Internet 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上的请求转发到ClusterIP类型的L7 Nginx LB服务,然后将流量转发到L7 Nginx LB Pods。
L7 Nginx LB Pod终止HTTPS连接,并将流量转发到website1.com和website2.com服务,它们正在侦听未加密的端口80。
(因为我们处于群集中,没有人,所以未加密会监听流量。)
(L7 LB根据流量进入的L7地址知道要转发到哪个服务)


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

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

而不是让website1通过website2.com访问资源 您应该具有通过website2fe.default.svc.cluster.local提供的website1访问资源。 (这是更有效的路由)