如何将Ambassador api网关用作支持PostgreSQL的代理?

时间:2018-11-06 06:08:16

标签: postgresql kubernetes envoyproxy

我正在使用大使来管理我的Kubernetes服务。我的Kubernetes服务包括一些Web服务器和一些postgres。我按照说明here建立到我的Web服务器的路由。这是一个示例:

  annotations:
    getambassador.io/config: |
      ---
      apiVersion: ambassador/v1
      kind:  Mapping
      name:  somewebservice
      prefix: /somewebservice
      service: somewebservice:80

这非常适合我的网络服务器。我可以做curl localhost/somewebservice,并且得到了预期的答复。

我在postgres容器中设置了相同的批注,但是我无法执行psql。

  annotations:
    getambassador.io/config: |
      ---
      apiVersion: ambassador/v1
      kind:  Mapping
      name:  atlas
      prefix: /somepostgres
      service: somepostgres:5432

我看到以下内容:

$ psql -h 'localhost/somepostgres' -p 5432
psql: could not translate host name "localhost/somepostgres" to address: nodename nor servname provided, or not known

我的目标是让大使接受HTTP / HTTPS和postgres请求。   感谢您的宝贵时间。

1 个答案:

答案 0 :(得分:1)

Postgres是一个TCP服务(第4层),而不是HTTP服务(第7层)。 It doesn't look like Ambassador supports TCP only services,即使Envoy proxy supports it。因此,您必须使用常规的Kubernetes TCP服务,如下所示:

kind: Service
apiVersion: v1
metadata:
  name: postgres-svc
spec:
  selector:
    app: postgres
  ports:
  - protocol: TCP
    port: 5432