2017-08-04 69 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。但问题仍然存在。谢谢。 –