Невозможно подключиться к AWS RDS PostgreSQL с Golang с помощью Helm Charts - PullRequest
0 голосов
/ 13 декабря 2018

Мне не удается подключиться к AWS RDS PostgeSQL при запуске Helm Chart для приложения Go (GORM).Все учетные данные хранятся в секрете kubernetes, и секрет используется в таблице управления.

Несколько очков:

  • Возможность локального подключения, просто отлично.
  • База данных PostgreSQL уже создана в RDS и гарантирует, что секрет kubernetes совпадает с теми же кредитами.
  • Образ Docker выдвигается и извлекается из Gitlab без каких-либо ошибок.
  • Command "helm ls "отображает состояние развертывания как" DEPLOYED "
  • При получении" kubectl get pod "я получаю STATUS как" CrashLoopBackoff "
  • При получении" kubectl description pod "я получаю СООБЩЕНИЕ«Откат перезапуска сбой контейнера»
  • Затем я беру «kubectl logs pod_name», чтобы отследить ошибку и получить следующее:
    1. не удалось подключиться к базе данных
    2. dial tcp 127.0.0.1:5432: connect: соединение отказано (не уверен, почему он все еще указывает "127.0.0.1", когда у меня установлен секрет)
  • Невозможно выполнить встручок, потому чтоон не работает.

Я пытался:

  • Защитите соединение в том же кластере от другого модуля, используя psql, чтобы убедиться, что кредиты в секрете находятся всинхронизировать с тем, что было настроено в RDS PostgreSQL
  • Смена API с DB_HOST на host =% s
  • Пробное соединение с использованием fmt.Sprintf, а также os.Getenv

"Версии"

GO версия:

go1.11.1 darwin / amd64

DOCKER версия:

Клиент: Версия: 18.06.1-ce Версия API: 1.38

API.GO (файл)

package controllers

import (
    "fmt"
    "log"
    "net/http"
    "os"
    "time"

    "github.com/gorilla/mux"
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/postgres"
    _ "gitlab.torq.trans.apps.ge.com/503081542/torq-auth-api/models"
)
var err error
type API struct {
    Database *gorm.DB
    Router   *mux.Router
}

func (api *API) Initialize(opts string) {

    // Initialize DB
    dbinfo := os.Getenv("DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, 
DB_PORT sslmode=disable")
    // dbinfo := os.Getenv("host=%s user=%s password=%s dbname=%s port=%s sslmode=disable")
    api.Database, err = gorm.Open("postgres", dbinfo)

    if err != nil {
        log.Print("failed to connect to the database")
        log.Fatal(err)
    }

    // Bind to a port and pass our router in
    // log.Fatal(http.ListenAndServe(":8000", handlers.CORS() . 
  (api.Router)))

    fmt.Println("Connection established")
    log.Printf("Postgres started at %s PORT", config.DB_PORT)
    // MODELS
    type application struct {
        ID        string    `json:"id" gorm:"primary_key"`
        CreatedAt time.Time `json:"-"`
        UpdatedAt time.Time `json:"-"`
        Name      string    `json:"name"`
        Ci        string    `json:"ci"`
    }
    type Cloud struct {
        ID   string `json:"id" gorm:"primary_key"`
        Name string `json:"name"`
    }
    fmt.Println("Tables are created")
    // Enable this line for DB logging
    api.Database.LogMode(true)}

// Initialize Router
    api.Router = mux.NewRouter()
    api.Router.HandleFunc("/api/v1/applications", 
api.HandleApplications)
    api.Router.HandleFunc("/api/v1/application/{id}", 
api.HandleApplication)
    api.Router.HandleFunc("/api/v1/clusters", api.handleClusters)
}

Я не совсем уверен, где проблема может быть здесьэто опыт обучения для себя.Любые идеи будут оценены.

Заранее спасибо!

1 Ответ

0 голосов
/ 13 декабря 2018

Я думаю, что код инициализации вашей базы данных не выполняет то, что вы хотите.Попробуйте что-то вроде этого

var driver = "postgres"
var name = os.Getenv("DB_NAME")
var host = os.Getenv("DB_HOST")
var user = os.Getenv("DB_USER")
var pass = os.Getenv("DB_PASSWORD")
var conn = fmt.Sprintf("host=%v user=%v password=%v dbname=%v sslmode=disable", host, user, pass, name)
api.Database, err := gorm.Open(driver, conn)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...