簡體   English   中英

如何為在 K8s 集群之外的同一本地主機上運行的外部服務創建端點?

[英]How do I create an Endpoint for an external service running on the same localhost outside of K8s cluster?

我正在使用 Docker for Windows (docker-desktop),它帶有一個小的單節點 kubernetes 實例。 我有一個場景,我的 pod 需要與運行在同一本地主機(windwos 10 機器)上但在 k8s 集群之外的一些外部服務進行通信。

我知道我可以在集群內使用kubernetes.docker.internal來訪問我的node/localhost 但不幸的是,豆莢在圖像中有一些我不想更改的默認連接字符串 - 說豆莢默認嘗試連接到一個 dns 字符串 - “我的服務器”。 因此,在我的場景中,我想定義一個名為“my-server”的 K8s 服務,該服務具有對 kubernetes.docker.internal 的端點引用,以便 kube-proxy 將其正確路由到我的本地主機,即我的 Windows 10 機器。

這有可能嗎? 我已經檢查過這個解決方案,但它討論了在其他節點或雲上運行的外部服務。 我也在考慮將本地機器主機名作為 ExternalName,但這在我的用例的 dns 解析中並不完全可靠。 所以我真的很想使用kubernetes.docker.internal作為服務端點。 有什么想法嗎?

我使用的一個技巧是將內部 IP 地址轉發回 127.0.0.1 它工作得很好。

# linux
sudo iptables -t nat -A OUTPUT -p all -d 10.0.100.100 -j DNAT --to-destination 127.0.0.1

# osx 
sudo ifconfig lo0 alias 10.0.100.100

我知道我可以在集群內使用kubernetes.docker.internal來訪問我的node/localhost

如果您確定可以通過此地址訪問您的 Windows 計算機,則有一些解決方案。

Kubernetes允許您修改任何Pod /etc/hosts文件。 我假設kubernetes.docker.internal解析為某個 IP。 如果您知道此 IP,則可以將其添加到Pod容器使用的/etc/hosts文件中。 這種方式可以將你想要的任何域名映射到這個IP。 具體可以參考kubernetes文檔中的這篇文章。


如果由於某種原因在這種情況下無法使用 IP,還有一種解決方案。 您可以使用rewrite插件來修改core-dns的默認行為。 這篇文章很好地描述了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM