(在学习Kubernetes时,我从未真正找到任何有用的资源来解释这一点)
场景:
我拥有mywebsite1.com和mywebsite2.com,我想在Kubernetes集群内托管它们 .
我根据以下网站部署了一个通用 Cloud 入口控制器2
kubectl apply -f <url>命令 . (mandatory.yaml和generic ingress.yaml)
https://kubernetes.github.io/ingress-nginx/deploy/
所以问题是这个架构是什么样的?以及数据如何流入集群?
1 回答
我将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
当我跑2
kubectl apply -f <url>命令
生成的命令:
Ingress Controller部署
类型为ClusterIP的L7 Nginx LB服务,侦听端口80和端口443
侦听端口80和端口443的L7 Nginx LB部署
(此部署中的窗格由入口控制器窗格管理/配置,它将窗格配置为入口对象指定的所需状态)
类型为NodePort的L7 Nginx LB服务(从30000 - 32767范围内随机挑选,但为了清楚起见,我会说NodePort服务正在侦听端口30080和30443)
具有公共IP地址的L4 LB VM .
kubectl获取svc --all-namespaces
给出L4 LB的IPv4 IP地址(让's say it' s 1.2.3.4)
由于我拥有这两个域名:我配置了互联网DNS,因此website1.com和website2.com都指向1.2.3.4
注意:入口控制器可识别 Cloud 提供商,因此它会自动执行以下反向代理/负载 balancer 配置:
KubeProxy使得任何节点的端口30080或30443上的请求在集群内转发到ClusterIP类型的L7 Nginx LB服务,然后该服务将流量转发到L7 Nginx LB Pod .
L7 Nginx LB pod终止HTTPS连接并将流量转发到website1.com和website2.com服务,这些服务正在侦听未加密的端口80 .
(它是's ok that it'未加密的,因为我们在群集中没有人会嗅到流量 . )
(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访问资源(这是更高效的路由)