Как использовать шлюз Ambassador API в качестве прокси-сервера с поддержкой PostgreSQL?

Я использую Ambassador для управления моими услугами в Kubernetes. Мои сервисы Kubernetes состоят из нескольких веб-серверов и нескольких postgres. Я следовал инструкциям здесь, чтобы установить маршруты к моим веб-серверам. Вот пример:

  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 ответ

Postgres - это служба TCP (уровень 4), а не служба HTTP(s) (уровень 7). Не похоже, что Ambassador поддерживает только TCP-сервисы, хотя прокси-сервер Envoy поддерживает его. Так что вам придется делать с обычным сервисом TCP Kubernetes, что-то вроде этого:

kind: Service
apiVersion: v1
metadata:
  name: postgres-svc
spec:
  selector:
    app: postgres
  ports:
  - protocol: TCP
    port: 5432
Другие вопросы по тегам