首页 > 解决方案 > OSBA 是在 AKS pod 中连接 Azure CosmosDB 的唯一方法吗

问题描述

我有一个 Java pod 应用程序,它使用默认连接字符串连接到 CosmosDB。该吊舱在我当地的 minikube 上完美运行。但是当我将它部署到我的 AKS 时,它会出现连接异常。

这个 MongoDB 错误导致 pod 不断崩溃。

等待匹配的服务器时在 30000 毫秒后超时...集群状态的客户端视图是... xxx.documents.azure.com:10255

看起来它无法访问 CosmosDB。起初我认为这是因为默认的网络安全规则阻止了传出端口 10255。然后我将 NSG 添加到该资源组。在 10255 端口添加出局规则,并不能解决问题。

然后我偶然发现了这篇文章。AKS 上的 CosmosDB 使用 OSBA 这是唯一的方法吗?我是否必须使用 OSBA 才能访问公共 CosmosDB?

从 Azure 门户复制连接字符串

mongodb://mycompany:some_base64_encrypted_stuff@mycompany.documents.azure.com:10255/?ssl=true&replicaSet=globaldb

我的 pod 的错误日志

更新:
原来 spring-boot-starter 2.1.0 正在使用 mongodb-driver 3.8.2。mongodb-driver 将 :27017 附加到我的连接字符串中。我已将其更新到 3.10.2。现在连接字符串是正确的。我在 Kubernetes 中运行的程序给了我 UnknownHostException mydoc.documents.azure.com。我猜可能是在 Windows 中构建 docker 映像然后在 alpine 上运行它引起的问题。

更新:
我想我已经非常接近答案了。问题来自 Kubernetes 集群。我的集群包含两个节点。我创建了另一个具有单个节点的集群。将我的程序部署到它,它会毫无错误地连接到 CosmosDB。但是我不知道如何调试kubernetes集群。

标签: kubernetesazure-cosmosdbazure-aks

解决方案


如果您使用网络策略,则可以使用示例网络策略来允许所有出口流量:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all
spec:
  podSelector: {}
  egress:
  - {}
  policyTypes:
  - Egress

如果您不使用网络策略,则连接应该可以正常工作,您不需要 OSBA。您可以稍后微调网络策略以使其更具限制性。

https://kubernetes.io/docs/concepts/services-networking/network-policies/

附言。如果您使用具有某些设置的 istio,您的出站请求也会被阻止,您也需要考虑到这一点


推荐阅读