Облачная функция - подключение к контейнеру Kubernetes - PullRequest
0 голосов
/ 15 мая 2019

Я хочу подключиться из 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 to postgres контейнер, время запроса истекает.

Как я могу решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 16 мая 2019

Сначала необходимо подключить облачную функцию к VPC, подробно здесь: https://cloud.google.com/functions/docs/connecting-vpc

0 голосов
/ 16 мая 2019

Чтобы подключиться из облачной функции к контейнеру GKE из внутренней сети, как отметили @ Cloud Ace , вам необходимо подключить облачную функцию к вашему VPC .

В противном случае, если вы не хотите иметь дело с соединителем, вы можете подключиться к вашей службе в кластере GKE через публичный IP-адрес вашего LB или узлов.

В обоих случаях вам нужно создать службу и открыть порт 5432 снаружи вашего кластера kubernetes. Вы не можете использовать напрямую IP-адреса под.

Если вы перейдете на с vpc-соединителем (внутри), вы можете просто использовать Службу типа NodePort и использовать внутренние IP-адреса узла .

Но если вы перейдете на без vpc-соединителя, служба type: NodePort также будет работать с внешними / публичными IP-адресами узлов, и вам также нужно добавить правило брандмауэра для узлов ,

Поэтому я бы предложил использовать службу типа LoadBalancer для конечной точки postgres, поскольку она создаст балансировщик нагрузки на GCP с публичным IP-адресом и автоматически создаст все правила переадресации и межсетевого экрана на GCP.

Надеюсь, это поможет!

...