我正在尝试从群集内部建立到我在GKE群集之外的数据库的连接。
我已经阅读了各种教程,包括https://cloud.google.com/blog/products/gcp/kubernetes-best-practices-mapping-external-services和多个SO问题,尽管问题仍然存在。
这是一个示例配置,我正在尝试通过该配置设置kafka连接性:
---
kind: Endpoints
apiVersion: v1
metadata:
name: kafka
subsets:
- addresses:
- ip: 10.132.0.5
ports:
- port: 9092
---
kind: Service
apiVersion: v1
metadata:
name: kafka
spec:
type: ClusterIP
ports:
- port: 9092
targetPort: 9092
我能够通过直接从节点VM本身通过nc 10.132.0.5 9092
连接来获得某种响应,但是如果我创建一个Pod,例如通过kubectl run -it --rm --restart=Never alpine --image=alpine sh
,则无法使用nc kafka 9092
从Pod内部进行连接。 。我的代码中的所有库都因超时而失败,因此这似乎是某种路由问题。
以Kafka为例,连接到其他数据库也遇到相同的问题。
已解决,问题在我对GCP运作方式的理解之内。
为了解决该问题,我必须添加一个防火墙规则,该规则允许来自内部GKE网络的所有传入流量。就我而言,这是10.52.0.0/24
地址范围。
希望它可以帮助某人。