Kubernetes:自动为服务端口转发

时间:2017-08-04 19:39:06

标签: ruby-on-rails postgresql kubernetes

我有一个使用postgres数据库的rails项目。我想使用Kubernetes构建数据库服务器,rails服务器将连接到该数据库。

例如,这是我定义的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

我尝试转发端口,并且rails服务器成功连接到数据库服务器:

$ 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 个答案:

答案 0 :(得分:1)

您可以尝试在NodePort上公开您的服务,然后访问该端口上的服务。

点击此处https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport