我正在 Kubernetes/GKE 上运行一个应用程序。
我有很多没有公共IP的设备。我需要从应用程序访问这些设备的 SSH 和 VNC。
最初的想法是在集群内运行 OpenVPN 服务器并连接设备,但后来遇到了问题:
似乎没有任何优雅/惯用的方式将流量从应用程序路由到 VPN 客户端。
基本上,我所需要的就是能够告诉route 10.8.0.0/24 via vpn-pod
我发现的可能的解决方案:
修改节点上的路由。我想让节点保持短暂状态,并且仅将所有内容都放在 K8s 清单中。
DaemonSet在具有 K8s 清单的节点上添加路由。然而,目前尚不清楚如何跟踪 OpenVPN pod IP 的变化。
伊斯蒂奥。似乎有点矫枉过正,我无法在文档中找到问题的解决方案。L3路由好像不支持,所以必须涉及到端口映射。
印花布。它在 GKE 上得到原生支持,并且确实支持 L3 路由,但我想避免对本来可以通过单个自定义路由解决的问题引入如此深远的更改。
OpenVPN 客户端边车。工作起来会非常优雅,只要允许客户端相互通信,VPN 服务器的托管位置和方式并不重要。但是,我想隔离客户端,并且可能需要从不同的 pod 访问客户端,这意味着必须将 sidecar 放置在多个位置,从而污染部署。可以通过将客户端分为不同 IP 范围的类别来实现隔离。
GCP / GKE 本身内的路由。它们只允许指定一个节点作为下一跳。这也意味着应用程序和 VPN 服务器都必须在 GCP 内运行。
我目前倾向于在简单的虚拟机上运行 OpenVPN 服务器并使用 GCP 路由。它可以工作,我可以从 K8s 应用程序 ping VPN 客户端,但它看起来仍然脆弱且硬连线。
然而,只有 sidecar 解决方案提供了一种完全分离关注点的方法。
是否有一种惯用的解决方案可以从其他 Pod 访问 Pod 专用网络?
networking routes openvpn kubernetes google-kubernetes-engine
我想优化以下查询:
SELECT SQL_NO_CACHE t.topic_id
FROM bb_topics t, bb_posters ps
WHERE t.topic_id = ps.topic_id
AND forum_id IN (2, 6, 7, 10, 15, 20)
ORDER BY ps.timestamp desc
LIMIT 20
Query took 0.1475 sec
Run Code Online (Sandbox Code Playgroud)
因此,起初我用INNER JOIN子查询替换了WHERE IN:
SELECT SQL_NO_CACHE t.topic_id
FROM ( SELECT * FROM bb_topics WHERE forum_id IN (2, 6, 7, 10, 15, 20) ) t
INNER JOIN bb_posters ps ON t.topic_id = ps.topic_id
ORDER BY ps.timestamp desc
LIMIT 20
Query took 0.1541 sec
Run Code Online (Sandbox Code Playgroud)
然后我尝试创建一个临时表:
CREATE TEMPORARY TABLE IF NOT EXISTS …Run Code Online (Sandbox Code Playgroud)