云功能-连接到Kubernetes容器

时间:2019-05-15 15:42:27

标签: kubernetes google-cloud-platform google-cloud-functions google-kubernetes-engine gke-networking

我想从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容器时,请求超时。

我该如何解决?

2 个答案:

答案 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上自动创建所有转发和防火墙规则。

希望有帮助!