我們正在嘗試在不向公眾公開的情況下與多個服務進行互動。
我有這樣的服務:-
apiVersion: "v1"
kind: "Service"
metadata:
name: "config"
namespace: "noicenamespace"
labels:
app: "config"
spec:
ports:
- protocol: "TCP"
port: 8888
targetPort: 8888
selector:
app: "config"
type: "LoadBalancer"
loadBalancerIP: ""
由于型別為 LoadBalancer,該服務可在公共網路上訪問。但是我們只希望這個服務對我們集群中的內部服務可見。
因此,如果我注釋掉 loadBalancerIP 并將型別設定為 ClusterIP,我的其他 pod 將無法訪問該服務。我嘗試像這樣指定服務名稱:-
http://config.noicenamespace.svc.cluster.local:8888
但我得到了超時。我們在 Google Kubernetes Engine 上從頭開始創建集群
uj5u.com熱心網友回復:
此錯誤"Error from server: error dialing backend: dial timeout"與從 GKE 1.19 開始在某些集群中逐步引入 Konnectivity 網路代理有關。
Konnectivity 網路代理(KNP)為主出口(kube-apiserver 到集群通信)提供 TCP 級別代理,
Konnectivity 服務由兩部分組成:控制平面網路中的 Konnectivity 服務器和節點網路中的 Konnectivity 代理。Konnectivity 代理啟動到 Konnectivity 服務器的連接并維護網路連接。啟用 Konnectivity 服務后,所有控制平面到節點的流量都通過這些連接,因此必須有一個防火墻規則允許通過埠正確通信(使用錯誤訊息中顯示的埠號和端點的 IP ),否則可能會出現撥號超時錯誤。
通過在 Cloud Logging 上使用此過濾器,您可以找到與由于缺少防火墻規則而導致的連接代理超時連接相關的錯誤日志:(請注意錯誤中端點的 IP 地址和埠號使用防火墻規則中的詳細資訊)
resource.labels.cluster_name="cluster name"
"konnectivity-agent"
添加允許您連接到埠的防火墻出口規則(使用錯誤訊息中顯示的埠號和端點的 IP),您可以使用以下命令添加該規則。這應該允許連接代理連接到控制平面。
gcloud compute firewall-rules create gke-node-to-konnectivity-service \
--allow=tcp:<port number> \
--direction=EGRESS \
--destination-ranges=<endpoint IP address > \
--target-tags=< node name> \
--priority=1000
uj5u.com熱心網友回復:
我猜你錯過了這里的埠號8888
所以應該這樣稱呼
http://config.noicenamespace.svc.cluster.local:8888
除錯步驟:
- 進入 pod 的執行模式之一。
wget -qO- http://config.noicenamespace.svc.cluster.local:8888或 curl 檢查您是否得到任何回應,然后退出 pods exec 模式。- 使用檢查端點
kubectl get ep并檢查端點的 ip 地址,如果您從 ep 獲得 IP,則嘗試卷曲該 IP:PORT 號,那么這意味著 pod 已附加到服務并且一切都正確 - 檢查網路策略是否到位。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/452922.html
標籤:Kubernetes 谷歌 Kubernetes 引擎 Kubernetes 服务
