c# - .NET Core pod 无法连接到 Kubernetes 中的 SQL Server pod
问题描述
我有一个 .NET Core pod,需要访问 Kubernetes(docker-desktop)中的 SQL Server pod。使用端口转发,我可以从 SQL Server Management Studio 连接到该 SQL Server。但是当我尝试从 .NET Core pod 连接时,它会说
服务器未找到或无法访问
这是日志中的错误
[04:28:38 Error] Microsoft.EntityFrameworkCore.Database.Connection
An error occurred using the connection to database 'MyTestDatabase' on server 'tcp:sqlserver-service,1433'.
[04:28:38 Error] Microsoft.EntityFrameworkCore.Query
An exception occurred while iterating over the results of a query for context type 'Web.Data.ApplicationDbContext'.
Microsoft.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 40 - Could not open a connection to SQL Server)
我在容器中的连接字符串
Server=tcp:sqlserver-service,1433;User ID=sa;Password=myPass12;Initial Catalog=MyTestDatabase;MultipleActiveResultSets=true;Connection Timeout=30;
SQL Server 部署 yml 文件
apiVersion: v1
kind: PersistentVolume
metadata:
name: sqldata
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteMany
hostPath:
path: "/sqldata"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: dbclaim
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 2Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: sqlserver
spec:
replicas: 1
selector:
matchLabels:
app: sqlserver
template:
metadata:
labels:
app: sqlserver
spec:
volumes:
- name: sqldata-storage
persistentVolumeClaim:
claimName: dbclaim
terminationGracePeriodSeconds: 10
initContainers:
- name: volume-permissions
image: busybox
command: ["sh", "-c", "chown -R 10001:0 /var/opt/mssql"]
volumeMounts:
- mountPath: "/var/opt/mssql"
name: sqldata-storage
containers:
- name: sqlserver1
image: mcr.microsoft.com/mssql/server
ports:
- containerPort: 1433
env:
- name: MSSQL_PID
value: "Developer"
- name: SA_PASSWORD
value: "myPass12"
- name: ACCEPT_EULA
value: "Y"
volumeMounts:
- mountPath: "/var/opt/mssql/data"
name: sqldata-storage
---
apiVersion: v1
kind: Service
metadata:
name: sqlserver-service
spec:
ports:
- name: sqlserver
port: 1433
targetPort: 1433
protocol: TCP
selector:
name: sqlserver
type: LoadBalancer
从 SQL Server Management Studio 连接
我肯定错过了一些东西。
提前致谢
解决方案
是我的错。实际上服务选择器是错误的。
selector:
name: sqlserver
它应该是
selector:
app: sqlserver
谢谢你们
推荐阅读
- curl - 使用 curl 上传到 Dropbox 文件请求链接
- flutter - ByteArray 未按时写入磁盘
- mongodb - 为 MongoDB 使用 0.0.0.0/0 的风险
- javascript - 如何在刷新时处理 vue 404?
- ansible - Ansible 同步模块用户标识问题
- powerbi - Power BI DAX,如何创建度量以计算 00:00 格式的时间总和
- json - 如何在 Flutter 中使用 JsonConverter 进行列表
- windows - IntelliJ 无法打开(即使重新安装后)
- javascript - 2D 可见性算法不适用于重叠情况
- pytorch - PyTorch 文档期间的 Makefile 错误