Ноутбук 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