Istio ServiceEntry для внешней базы данных с взаимными tls, не может подключиться к службе базы данных - PullRequest
0 голосов
/ 12 ноября 2018

Я использую istio 1.0.2 версия с istio-demo-auth.yaml , у меня есть база данных mssql вне кластера k8s, я хочу подключить его из сервисов. Я пытаюсь с этим Использование внешних служб TCP блогов , но службы не могут подключиться к внешнему экземпляру mssql. Запись службы, как показано ниже:

---
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: mssql-entry
  namespace: multitenancy
spec:
  hosts:
  - mssql-master
  addresses:
  - $outside-db-ip/32
  ports:
  - number: 2433
    name: db
    protocol: TCP
  location: MESH_EXTERNAL
  resolution: STATIC
  endpoints:
  - address: $outside-db-ip
    ports:
      tcp: 2433

---
apiVersion: v1
kind: Service
metadata:
  name: mssql-master
  namespace: multitenancy
  labels:
    app: v1
spec:
  ports:
    - port: 2433
      targetPort: 2433
      protocol: TCP
---
apiVersion: v1
kind: Endpoints
metadata:
  name: mssql-master
  namespace: multitenancy
subsets:
  - addresses:
    - ip: $outside-db-ip
    ports:
    - port: 2433
      protocol: TCP

А в журнале служб, отображающем «Ошибка Prelogin: порт хоста mssql-master 2433 Ошибка чтения ответа prelogin: Сброс соединения ClientConnectionId:», кажется, вообще не достиг mssql. Как настроить внешний кластер БД для взаимных служб tls?

1 Ответ

0 голосов
/ 14 ноября 2018

Как уже упоминалось @SmileSees, проблема была решена путем отключения взаимной аутентификации TLS для целевого экземпляра mssql. В связи с тем, что экземпляр базы данных, расположенный за пределами сетки Istio и не внедренный sidecar Envoy для этой службы, соединение безопасности TLS не было установлено.

Можно использовать SPIFFE инфраструктуру для защиты служб в гетерогенных средах.

Ссылочные ссылки для дальнейшего исследования:

  1. Взаимная аутентификация TLS
  2. Политика авторизации
  3. Istio security vs SPIFFE
...