我想从Google Cloud Function连接到Kubernetes(GKE)容器。具体来说,该容器具有postgres数据库,我想读取表中的记录。
在Golang中:
func ConnectPostgres(w http.ResponseWriter, r *http.Request) {
db, err := sql.Open("postgres", "postgresql://postgres@10.32.0.142:5432/myDatabase")
if err != nil {
http.Error(w, "Error opening conn:" + err.Error(), http.StatusInternalServerError)
}
defer db.Close()
err = db.Ping()
if err != nil {
http.Error(w, "Error ping conn:" + err.Error(), http.StatusInternalServerError)
}
rows, err := db.Query("SELECT * FROM myTable")
fmt.Println(rows)
w.Write([]byte(rows))
}
10.32.0.142是具有容器的容器的内部IP。
但是当云功能尝试Ping到postgres容器时,请求超时。
我该如何解决?
答案 0 :(得分:2)
您需要首先将Cloud Function连接到VPC,在此处进行详细说明:https://cloud.google.com/functions/docs/connecting-vpc
答案 1 :(得分:0)
要从Cloud Function从内部网络连接到GKE容器,如 @Cloud Ace 所述,您必须connect your Cloud Function to your VPC。
否则,如果您不想使用连接器,则可以通过LB或节点的公共IP地址连接到GKE群集上的服务。
在两种情况下,您都必须创建服务并将5432
端口暴露给kubernetes集群之外。您不能直接使用pod ip地址。
如果要在内部使用 vpc连接器,则可以使用NodePort type service并使用节点的内部ip 地址。
但是,如果您要不使用 vpc连接器,那么type: NodePort
服务也将与节点的外部/公共ip地址一起使用,并且您还必须为节点添加firewall rule 。
因此,我建议对您的postgres端点使用LoadBalancer类型的服务,因为它将在具有公共IP地址的GCP上创建负载均衡器,并会在GCP上自动创建所有转发和防火墙规则。
希望有帮助!