Jupyter 노트북과 Kubernetes 서버 외부의 Docker 서비스가 포함된 kubernetes(kubeflow + k8s) 포드를 실행 중입니다. 현재 SQL 서비스에 연결하려고 하는데 계속 ConnectionResetError가 발생합니다. 방화벽과 Docker 모두 필요한 포트를 노출하고 있지만 k8s가 계속 연결되지 않습니다. 무엇이 문제일까요? (자세한 내용이 필요하면 알려주십시오).
감사해요.
답변1
댓글에서 언급했듯이
istio 관점에서 이 작업을 수행하려면 다음을 추가해야 합니다.서비스 항목따라서 istio 주입된 포드는 외부 데이터베이스와 통신할 수 있습니다.
ServiceEntry를 사용하면 Istio의 내부 서비스 레지스트리에 추가 항목을 추가할 수 있으므로 메시에서 자동 검색된 서비스가 수동으로 지정된 서비스에 액세스/라우팅할 수 있습니다. 서비스 항목은 서비스의 속성(DNS 이름, VIP, 포트, 프로토콜, 엔드포인트)을 설명합니다. 이러한 서비스는 메시 외부(예: 웹 API)이거나 플랫폼 서비스 레지스트리의 일부가 아닌 메시 내부 서비스(예: Kubernetes의 서비스와 통신하는 VM 집합)일 수 있습니다. 또한 서비스 항목의 끝점은 작업 부하 선택기 필드를 사용하여 동적으로 선택할 수도 있습니다. 이러한 엔드포인트는 WorkloadEntry 개체 또는 Kubernetes Pod를 사용하여 선언된 VM 워크로드일 수 있습니다. 단일 서비스에서 포드와 VM을 모두 선택하는 기능을 사용하면 서비스와 연결된 기존 DNS 이름을 변경하지 않고도 VM에서 Kubernetes로 서비스를 마이그레이션할 수 있습니다.
istio에 예제가 있습니다.선적 서류 비치.
다음을 찾을 수 있습니다.Istio를 설치한 후 MySQL을 연결할 수 없습니다.. 이는 MySQL에서 작동하지 않는 PERMISSIVE 모드 때문입니다. 다음과 같은 오류 메시지가 나타날 수 있습니다.ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0.
문제를 해결하는 데는 두 가지 옵션이 있습니다.
1. 상호 TLS를 비활성화합니다.
Istio 상호 TLS를 원하지 않는 경우 이 옵션을 선택하십시오. MySQL 서비스에서 상호 TLS를 명시적으로 비활성화하면 이를 달성할 수 있습니다.
$ 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. STRICT 모드에서 상호 TLS를 활성화합니다.
MySQL에 대한 상호 TLS 보호를 원하는 경우 대상 규칙 및 인증 정책을 사용하여 상호 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