首页 文章

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

提问于
浏览
0

(在学习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 回答

  • 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

    10.1.1.10     10.1.1.11     10.1.1.12
    

    当我跑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 配置:

    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 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访问资源(这是更高效的路由)

相关问题