Я пытаюсь развернуть приложение asp.net core 2.2 в Kubernetes.Это приложение представляет собой простую веб-страницу, для доступа к которой требуется доступ к базе данных SQL Server.Эта база данных размещена на моем локальном компьютере разработки (localhost), а веб-приложение развернуто в кластере мини-кубов для моделирования производственной среды, в которой мое веб-приложение может быть развернуто в облаке, и доступа к удаленной базе данных.
Мне удалось отобразить свое веб-приложение, открыв порт 80. Однако я не могу понять, как подключить мое веб-приложение к базе данных SQL Server, размещенной на моем локальном компьютере, изнутри кластера.
Я предполагаю, что строка подключения верна, поскольку мое веб-приложение может подключаться к базе данных SQL Server, когда я развертываю ее на локальном сервере IIS, в контейнере Docker (запуск Docker) или службе Docker (служба создания Docker)но не тогда, когда он развернут в кластере Kubernetes.Я понимаю, что кластер находится в другой сети, поэтому я попытался создать службу без селектора, как описано в этот вопрос , но не повезло ... Я даже попытался изменить IP-адрес строки подключения, чтобы он соответствовалодин из созданных сервисов, но тоже не удалось.
Мой брандмауэр настроен на прием входящего соединения с портом 1433.
Моя база данных SQL Server настроена для разрешения удаленного доступа.
Вот строка подключения, которую я использую:
"Server=172.24.144.1\\MyServer,1433;Database=TestWebapp;User Id=user_name;Password=********;"
И вот файл, который я использую для развертывания моего веб-приложения:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: webapp
spec:
replicas: 1
template:
metadata:
labels:
app: webapp
spec:
containers:
- name: webapp
image: <private_repo_url>/webapp:db
imagePullPolicy: Always
ports:
- containerPort: 80
- containerPort: 443
- containerPort: 1433
imagePullSecrets:
- name: gitlab-auth
volumes:
- name: secrets
secret:
secretName: auth-secrets
---
apiVersion: v1
kind: Service
metadata:
name: webapp
labels:
app: webapp
spec:
type: NodePort
selector:
app: webapp
ports:
- name: port-80
port: 80
targetPort: 80
nodePort: 30080
- name: port-443
port: 443
targetPort: 443
nodePort: 30443
---
apiVersion: v1
kind: Service
metadata:
name: sql-server
labels:
app: webapp
spec:
ports:
- name: port-1433
port: 1433
targetPort: 1433
---
apiVersion: v1
kind: Endpoints
metadata:
name: sql-server
labels:
app: webapp
subsets:
- addresses:
- ip: 172.24.144.1 <-- IP of my local computer where SQL Server is running
ports:
- port: 1433
Итак, я получаю развертывание с именем «webapp», содержащее только один модуль, две службы с именем «webapp»и «sql-сервер» и две конечные точки, также называемые «webapp» и «sql-server».Вот их данные:
> kubectl describe svc webapp
Name: webapp
Namespace: default
Labels: app=webapp
Annotations: <none>
Selector: app=webapp
Type: NodePort
IP: 10.108.225.112
Port: port-80 80/TCP
TargetPort: 80/TCP
NodePort: port-80 30080/TCP
Endpoints: 172.17.0.4:80
Port: port-443 443/TCP
TargetPort: 443/TCP
NodePort: port-443 30443/TCP
Endpoints: 172.17.0.4:443
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
> kubectl describe svc sql-server
Name: sql-server
Namespace: default
Labels: app=webapp
Annotations: <none>
Selector: <none>
Type: ClusterIP
IP: 10.107.142.32
Port: port-1433 1433/TCP
TargetPort: 1433/TCP
Endpoints:
Session Affinity: None
Events: <none>
> kubectl describe endpoints webapp
Name: webapp
Namespace: default
Labels: app=webapp
Annotations: <none>
Subsets:
Addresses: 172.17.0.4
NotReadyAddresses: <none>
Ports:
Name Port Protocol
---- ---- --------
port-443 443 TCP
port-80 80 TCP
Events: <none>
> kubectl describe endpoints sql-server
Name: sql-server
Namespace: default
Labels: app=webapp
Annotations: <none>
Subsets:
Addresses: 172.24.144.1
NotReadyAddresses: <none>
Ports:
Name Port Protocol
---- ---- --------
<unset> 1433 TCP
Events: <none>
Я ожидаю подключения к базе данных SQL Server, но когда мое приложение пытается открыть соединение, я получаю эту ошибку:
SqlException:При установке соединения с SQL Server произошла ошибка, связанная с сетью или экземпляром.Сервер не найден или не был доступен.Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен для разрешения удаленных подключений.(провайдер: провайдер TCP, ошибка: 40 - не удалось открыть соединение с SQL Server)
Я новичок в Kubernetes, и мне не очень комфортно работать в сети, поэтому любая помощь приветствуется.Лучшая помощь - дать мне несколько советов / инструментов для отладки, так как я даже не знаю, где или когда попытка подключения заблокирована ...
Спасибо!