簡體   English   中英

無法使用Helm Charts使用Golang連接到AWS RDS PostgreSQL

[英]Cannot connect to AWS RDS PostgreSQL with Golang using Helm Charts

當運行Go App的Helm Chart(GORM)時,我無法連接到AWS RDS PostgeSQL。 所有憑據都存儲在kubernetes機密中,並且該機密表中正在使用該機密。

幾點:

  • 能夠在本地連接就好了。
  • PostgreSQL數據庫已經在RDS中創建,並確保kubernetes秘密地匹配相同的憑據。
  • 從Gitlab推送和拉取Docker映像沒有任何錯誤。
  • 命令“ helm ls”將部署狀態顯示為“ DEPLOYED”
  • 當使用“ kubectl get pod”時,我的狀態為“ CrashLoopBackoff”
  • 當使用“ kubectl describe pod”時,我收到消息“ Back-off重新啟動失敗的容器”
  • 然后,我使用“ kubectl日志pod_name”來跟蹤錯誤,並返回以下內容:
    1. 連接數據庫失敗
    2. 撥打tcp 127.0.0.1:5432:connect:連接被拒絕(不確定為什么我安裝了機密后為什么仍指定“ 127.0.0.1”)
  • 由於未運行,無法執行到Pod中。

我努力了:

  • 使用psql從不同的Pod保護同一集群中的連接,以確保密碼中的憑據與RDS PostgreSQL中設置的同步
  • 將API從DB_HOST更改為host =%s
  • 嘗試使用fmt.Sprintf和os.Getenv進行連接

“版本”

GO版本:

go1.11.1達爾文/ 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)
}

我不確定這個問題可能在哪里,這對我自己是一次學習的經驗。 任何想法,將不勝感激。

提前致謝!

我認為您的數據庫初始化代碼無法滿足您的要求。 試試這個

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM