我正在尝试将现有的Azure mssql服务器作为服务映射到我的kubernetes集群,但看来我的应用程序无法连接到它。
这是我的配置文件,我在做什么错?也许是因为我正在特定的名称空间上执行此操作?
---
apiVersion: v1
kind: Service
metadata:
name: my-database
spec:
type: ExternalName
externalName: mydb.database.windows.net
然后,在我的应用程序中,我只使用以下字符串:
spring.datasource.url: jdbc:sqlserver://my-database:1433;databaseName=DATABASE_DEV
如果我使用数据库主机mydb.database.windows.net,则一切正常,因此这不是连接问题,而是与我的服务配置有关的问题。
答案 0 :(得分:2)
一种解决方案是创建Service without a selector,然后创建Endpoints
的{{1}}对象。类似于我在这里的答案:
Kubernetes pod unable to connect to rabbit mq instance running locally
只是无视关于本地主机的讨论...
答案 1 :(得分:0)
对于这个问题,我认为您误解了Kubernetes服务。看一下Service。该服务仅将访问流量重定向到Kubernetes Pods,而不是Azure资源。
对于服务的外部名称类型,它显示工作过程here:
在查找主机my-service.prod.svc.cluster.local时, 群集DNS服务返回带有值的CNAME记录 my.database.example.com。访问我的服务的工作方式与 其他服务,但区别在于重定向 发生在DNS级别,而不是通过代理或转发。 如果您以后决定将数据库移到群集中, 可以启动其Pod,添加适当的选择器或端点并进行更改 服务的类型。
因此,如果要访问Azure数据库,则只能使用Azure为您提供的数据库服务器名称***.database.windows.net
。对您来说,它是mydb.database.windows.net
。