gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 22:27:43 24 4
gpt4 key购买 nike

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

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

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

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

最佳答案

我将 2 个证书转换为 2 个 .key 和 2 个 .crt 文件
我使用这些文件制作 2 个 TLS secret (每个网站 1 个,因此它们将启用 HTTPS)
我创建了 2 个入口对象:

  • 一个说 website1.com/,指向名为 website1fe 的服务,并引用 website1 的 HTTPS/TLS 证书 secret 。 (website1fe 服务仅监听 80 端口,并将流量转发到由 website1fe 部署生成的 pod)
  • 另一个是 website2.com/,指向一个名为 website2fe 的服务,并引用了 website2 的 HTTPS/TLS 证书 secret 。 (website2fe 服务只监听 80 端口,并将流量转发到由 website2fe 部署生成的 pod)

  • 我有一个存在于私有(private)子网中的 3 节点 Kubernetes 集群。
    他们有 IP
     10.1.1.10     10.1.1.11     10.1.1.12
    当我运行 2
    kubectl apply -f < url > 命令
    这些命令生成:
  • 包含运行 Nginx L7 LB 软件的 pod 的 kubernetes 部署,它们基于存储在 etcd 中的 Ingress .yaml 对象以声明方式配置自己,因为 nginx L7 LB pod 是自我配置的,它们被称为 Ingress Controller Pod。 (这些 nginx 入口 Controller pod 监听端口 80 和 443。)
  • 负载均衡器类型的 Kubernetes 服务:负载均衡器类型的 Kubernetes 服务,在后台使用 Nodeport,(当节点有私有(private) IP 时,NodePort 可以安全使用,NodePorts 随机(注意:服务类型 LB 在后台使用 NodePort,并且将被随机选择,并且云 API 将自动将云 LB 链接到正确的随机 NodePort。或者,您可以使用服务类型 NodePort 并获得显式选择 NodePort 的选项。)从 30000 - 32767 的范围内选择,但为了清楚起见缘故,我会说 NodePort 服务正在监听集群中每个节点的端口 30080 和 30443),云 LB 自动配置并使用公共(public) IP 地址(使用默认设置)存在于集群外部,并且它自动路由到暴露 Controller 的 NodePort 的流量。 (流量示例:LB:443 --> NP:30443 --> IngressControllerPod:443 --> Grafana:3000)

  • kubectl 获取 svc --all-namespaces
    给出 L4 LB 的 IPv4 IP 地址(假设它是可公开路由的 IP 1.2.3.4)
    由于我拥有这两个域:我配置 Internet DNS,以便 website1.com 和 website2.com 都指向 1.2.3.4
    注意:入口 Controller 是云提供商感知的,因此它自动执行以下反向代理/负载平衡配置:
    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/Ingress Controller Service,然后将流量转发到 L7 Nginx LB Pod。
    L7 Nginx LB pod 终止* HTTPS 连接并将流量转发到 website1.com 和 website2.com 服务,它们正在监听未加密的端口 80。(没关系它是未加密的,因为我们在没有人会嗅探的集群中流量。)(*注意有时 Cloud LB 会终止 HTTPS,然后通过明文端口 80 转发到入口 Controller ,但这并不是那么糟糕,因为明文发生在私有(private) 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 地址

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

    关于kubernetes - Kubernetes 集群内的流量如何流动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52241501/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com