2017-08-04 63 views
1

我有一個使用postgres數據庫的rails項目。我想用Kubernetes構建一個數據庫服務器,rails服務器將連接到這個數據庫。Kubernetes:服務端口自動轉發

例如,這裏是我用下面的命令定義postgres.yml

apiVersion: v1 
kind: Service 
metadata: 
    name: postgres 
spec: 
    selector: 
    app: postgres 
    ports: 
    - name: "5432" 
    port: 5432 
    targetPort: 5432 
--- 
apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: postgres 
spec: 
    replicas: 1 
    strategy: 
    type: Recreate 
    template: 
    metadata: 
     labels: 
     app: mysql 
    spec: 
     containers: 
     - env: 
     - name: POSTGRES_DB 
      value: hades_dev 
     - name: POSTGRES_PASSWORD 
      value: "1234" 
     name: postgres 
     image: postgres:latest 
     ports: 
     - containerPort: 5432 
     resources: {} 
     stdin: true 
     tty: true 
     volumeMounts: 
     - mountPath: /var/lib/postgresql/data/ 
      name: database-hades-volume 
     restartPolicy: Always 
     volumes: 
     - name: database-hades-volume 
     persistentVolumeClaim: 
      claimName: database-hades-volume 
--- 
apiVersion: v1 
kind: PersistentVolumeClaim 
metadata: 
    name: database-hades-volume 
spec: 
    accessModes: 
    - ReadWriteOnce 
    resources: 
    requests: 
     storage: 100Mi 

我運行此:kubectl run -f postgres.yml

但是,當我嘗試運行rails服務器。我總能在以下情況例外:

PG::Error 
invalid encoding name: utf8 

我嘗試轉發端口,導軌服務器成功連接到數據庫服務器:

$ kubectl get pods 
NAME      READY  STATUS RESTARTS AGE 
postgres-3681891707-8ch4l 1/1  Running 0   1m 

然後運行以下命令:

kubectl port-forward postgres-3681891707-8ch4l 5432:5432 

我覺得這解決方案不好。我如何在我的postgres.yml中定義,所以我不需要像上面那樣手動進行端口轉發。

感謝

回答

1

您可以暴露你的NodePort服務,然後在該端口上訪問服務嘗試。

入住這裏https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport

+0

我已經將我的服務NodePort但問題還是一樣。 –

+0

試試這個: kubectl公佈服務postgres --port = 80 --type = LoadBalancer,然後運行kubectl獲取服務並查看該服務所在的端口號 –

+0

您的意思是轉換類型爲LoadBalancer?我試過了,看到發佈端口是32395.然後我再次嘗試使用nodePort = 32395的NodePort。但問題仍然存在。謝謝。 –