Ноутбук Jupyter в Kubernetes не может подключиться к внешней службе докера

Я запускаю модуль kubernetes (kubeflow + k8s) с блокнотом Jupyter и службой докеров за пределами сервера kubernetes. В настоящее время я пытаюсь подключиться к службе sql, но он продолжает получать ошибку ConnectionResetError, и брандмауэр, и докер предоставляют необходимый порт, но k8s не может подключиться, в чем может быть проблема? (скажите, если вам нужна более подробная информация).

Спасибо.

1 ответ

Как упоминалось в комментариях

С точки зрения istio, чтобы это работало, вам придется добавить ServiceEntry , чтобы модули, внедренные istio, могли взаимодействовать с внешней базой данных.

ServiceEntry позволяет добавлять дополнительные записи во внутренний реестр сервисов Istio, чтобы автоматически обнаруженные сервисы в ячеистой сети могли получать доступ к этим вручную указанным сервисам и маршрутизировать их. Запись службы описывает свойства службы (DNS-имя, VIP-адреса, порты, протоколы, конечные точки). Эти службы могут быть внешними по отношению к ячейке (например, веб-API) или внутренними службами, которые не являются частью реестра служб платформы (например, набор виртуальных машин, взаимодействующих со службами в Kubernetes). Кроме того, конечные точки записи службы также можно выбирать динамически с помощью поля workloadSelector. Этими конечными точками могут быть рабочие нагрузки виртуальной машины, объявленные с помощью объекта WorkloadEntry или модулей Kubernetes. Возможность выбирать как модули, так и виртуальные машины в рамках одной службы позволяет мигрировать службы с виртуальных машин в Kubernetes без необходимости изменения существующих DNS-имен, связанных с службами.

В документации istio есть пример .

Обратите внимание: после установки Istio вы можете обнаружить, что MySQL не может подключиться . Это связано с режимом PERMISSIVE, который не работает с MySQL. Вы можете увидеть сообщения об ошибках, такие какERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0.

Есть два варианта решения проблемы.

1.Отключите взаимный TLS.

Выберите этот вариант, если вам не нужен взаимный TLS Istio. Это достигается путем явного отключения взаимного TLS в службе MySQL.

      $ kubectl apply -f - <<EOF
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: mysql-nomtls-peerauthn
spec:
  selector:
    matchLabels:
      app: <YOUR-MYSQL-SERVICE>     # The label of *your* K8s Service
  mtls:
    mode: DISABLE
EOF

2.Включите взаимный TLS в режиме STRICT.

Если вам нужна взаимная защита TLS для MySQL, включите взаимный TLS, используя правило назначения и политику аутентификации.

      $ kubectl apply -f - <<EOF
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: mysql-mtls-peerauthn
spec:
  selector:
    matchLabels:
      app: <YOUR-MYSQL-SERVICE>     # The label of *your* K8s Service
  mtls:
    mode: STRICT
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: mysql-mtls-dr
spec:
  host: YOUR-MYSQL-SERVICE     # The name of *your* K8s Service
  trafficPolicy:
    tls:
      mode: ISTIO_MUTUAL
EOF
Другие вопросы по тегам