neo*_*yle 3 kubernetes kubernetes-ingress nginx-ingress
(在学习 Kubernetes 时,我从未真正找到任何解释这一点的好资源)
场景:
我拥有 mywebsite1.com 和 mywebsite2.com,我想将它们都托管在 Kubernetes 集群中。
我根据以下网站使用 2
kubectl apply -f < url > 命令部署了一个通用的云入口控制器。(mandatory.yaml 和通用 ingress.yaml)
https://kubernetes.github.io/ingress-nginx/deploy/
所以问题是这种架构是什么样的?以及数据如何流入集群?
我将 2 个证书转换为 2 个 .key 和 2 个 .crt 文件
我使用这些文件来制作 2 个 TLS 机密(每个网站 1 个,因此它们将启用 HTTPS)
我创建了 2 个入口对象:
一个说 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
Run Code Online (Sandbox Code Playgroud)
当我运行 2
kubectl apply -f < url > 命令时,
这些命令生成:
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
Run Code Online (Sandbox Code Playgroud)
KubeProxy 使任何节点的端口 30080 或 30443 上的请求在集群内部转发到 Nginx L7 LB/Ingress Controller Service,然后将流量转发到 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地址
而不是通过website2.com让website1访问资源您应该通过website2fe.default.svc让website1访问资源。 cluster.local(这是更有效的路由)
| 归档时间: |
|
| 查看次数: |
1344 次 |
| 最近记录: |