c# - 无法从 kubernetes 中的 c# 前端连接到 Mysql 服务
问题描述
我有一个 kubernetes 集群,前端是用 .NET Core 编写的 C# 控制台应用程序和一个后端 Mysql db。这两个应用程序都部署为不同 pod 中的 Kubernetes 中的部署。我还创建了一个 mysql 服务,以便能够与 Mysql db 连接。但是,我似乎无法从 .NET 核心控制台应用程序连接到 mysql 服务器到 kubernetes Mysql 服务。但是,我几乎可以使用控制台应用程序中的 IP 地址与 Mysql pod 连接。
我会尽力描述这里的情况。
$ kubectl -n radiomicsapp get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
anonymizer-pod-586548ddd9-kv8cj 2/2 Running 0 21s 10.244.0.187 aks-agentpool-35971152-1
mysql-744bfb878c-scwz9 1/1 Running 0 19h 10.244.1.244 aks-agentpool-35971152-2
$ kubectl -n abcapp get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mysql ClusterIP 10.0.54.120 <none> 3306/TCP 104d
如果我使用 pod (10.244.1.244) 中的 IP 地址与 db 连接,它可以工作。但是,如果我使用 mysql 服务的 IP 地址(10.0.54.120),它会抛出
Error: Unable to connect to any of the specified MySQL hosts.
由于 mysql pod 的 IP 地址会在 pod 重新启动/重新创建时发生变化,因此我必须在我的匿名控制台应用程序中更改 db 连接字符串,我创建了一个 ClusterIP 类型的 mysql 服务,如下所示:
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: abcapp
labels:
app: abc
spec:
type: ClusterIP
ports:
- name: mysql
port: 3306
protocol: TCP
targetPort: 3306
selector:
app: abc
此外,我的匿名器 pod、mysql pod 以及 mysql 服务都在同一个命名空间中。
任何帮助将非常感激。感谢您抽出宝贵时间。
解决方案
您必须在代码上使用服务名称,并让 kube-dns 处理 IP 解析,以确保无论 pod 是重新创建还是移动,并且在此过程中使用不同的 IP 地址,您的代码都能正常工作。
从另一个答案很容易推断出一个近似的例子
string connstring = string.Format("Server=mysql; database={0}; UID=UserName; password=your password", databaseName);
connection = new MySqlConnection(connstring);
注意只需要放在Server上mysql
推荐阅读
- ios - 关于如何继续 UNUserNotificationCenter 64 限制的问题
- python - 根据其他列相同数据填充缺失数据
- sparql - 我应该如何将凭据传递给 SparqlRemoteEndpoint 类对象?
- node.js - 使用 AWS api 网关 + lambda + Nodejs 的私有和公共 ip
- solr - 索引 solr 中的特定行
- node.js - 在节点 Fabric 1.3 中实例化 fabcar 链码时出错
- javascript - 构造函数中的状态之间有什么区别?
- zurb-foundation - Zurb Foundation 6 align-right 不工作
- html - 如何将日期时间类型转换为波斯日期?
- amazon-web-services - 如何在不使用 IAM 角色或 IAM 用户访问权限的情况下访问 AWS 资源