Docker
如何在 Google Cloud Run 上使用自定義 DNS 伺服器?
我有一個使用連接器連接到共享 VPC 的 Cloud Run 完全託管服務。此共享 VPC 由另一個 GCP 項目和另一個團隊管理,但我可以將實例部署到此 VPC。此 VPC 具有解析該團隊的內部資源的自定義 DNS 伺服器。自定義 DNS 伺服器不會通過 DHCP 傳播到 VPC 使用者。我可以通過 IP 從 Cloud Run 容器訪問所有內部資源,但如果不使用自定義 DNS 伺服器,則無法按名稱訪問它們。
問題是我無法將這些伺服器傳播到容器而不會出現一些錯誤。
我在容器中創建了以下入口點腳本:
#!/usr/bin/env sh set -e { echo "nameserver 10.80.64.19"; echo "nameserver 10.80.64.20"; echo "nameserver 10.80.64.21"; } >> /etc/resolv.conf exec "$@"
這導致正在執行的容器上出現以下文件內容:
nameserver 10.80.64.21 nameserver 10.80.64.20 nameserver 10.80.64.19 search google.internal. nameserver 169.254.169.254
(在我的腳本編寫之後添加的自定義行)
有時會使用最後一個 NS 伺服器,並且按名稱連接共享 VPC 資源時出現錯誤(如
Failed to resolve 'some-name'
)。如何解決這個問題?AFAIK,我需要僅使用自定義 DNS 伺服器或“合併”來自它們和標準伺服器的資訊
169.254.169.254
。在這種情況下我該怎麼辦?有哪些可能的解決方案?
Google支持建議的解決方案選項:
在 Cloud Run 端處理的問題是我們無法覆蓋,
resolv.conf
因為網路東西是由 Docker 設置的。我們有兩種選擇來做到這一點:
- 出站轉發區:https ://cloud.google.com/dns/docs/zones#creating-forwarding-zones
- 出站伺服器策略:https ://cloud.google.com/dns/docs/policies#create-out
通過實施轉發區域,您可以指示雲 DNS 請求哪些域名應該轉到特定的 DNS 伺服器。如果您沒有太多由自定義 DNS 伺服器提供的內部區域名稱,那麼這是一個不錯的選擇。
通過實施出站策略,您可以更改解析順序,並且可以強制先將解析請求發送到自定義伺服器。一旦請求到達 VPC 連接器,它應該轉到元數據伺服器,並且它應該知道如何使用出站伺服器策略。