首页 > 解决方案 > Kubernetes 在 LXC 和 Ingress 上的迷人分布

问题描述

我正在尝试从托管在本地 LXC 容器上的 Kubernetes 集群中公开我的服务的体面解决方案。

设置如下:

主机:运行 LXC 集群的 Ubuntu 18.04。

在 LXC 内部有一个 Charmed Distribution Of Kubernetes 正在运行我的应用程序和另一个运行 NGINX 反向代理的容器。

我还在 kubernetes 中设置了一个 Metallb 负载均衡器,并使用所有需要互联网公开的 k8s 服务LoadBalancer

apiVersion: v1 kind: Service metadata: namespace: blazedesk name: blazedesk-sdeweb-server labels: app: blazedesk spec: ports: - port: 80 targetPort: 80 name: "http" - port: 443 targetPort: 443 name: "https" selector: app: blazedesk tier: sdeweb-server type: LoadBalancer

到目前为止,我所做的是将所有进入主主机的 http 和 https 流量重定向到 NXGINX 反向代理:

lxc config device add proxy myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80 proxy_protocol=true

lxc config device add proxy myport443 proxy listen=tcp:0.0.0.0:443 connect=tcp:127.0.0.1:443 proxy_protocol=true

然后将 Nginx 配置为将匹配 DNS 地址的流量重定向到 k8s 服务 external-ips:

NAME                               TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                      AGE
service/blazedesk-sdeweb-server    LoadBalancer   10.152.183.215   10.190.26.240   80:31476/TCP,443:31055/TCP   17d

proxy_pass https://10.190.26.240;

可以想象,这种设置意味着大量的手动工作,尤其是在重新启动 k8s 服务并由 metallb 负载均衡器分配新 ip 的情况下。

有没有更简单的方法可以将来自主机的流量直接重定向到 kubernetes 入口,以某种方式绕过 LXC 层?

标签: kubernetesload-balancinglxc

解决方案


我实际上使它与作为 LoadBalancer 服务公开的 NGINX 入口控制器一起工作,并使用 iptables 将来自主机的 http 和 https 流量重定向到入口外部 ip。


推荐阅读