TL;DR

由于bitnami在配置mariadb时设置了NetworkPolicy,这导致了只能从特定的端口访问pod。但是在istio中,由于不会绕过NetworkPolicy,导致使用istio时,需要的15008端口被阻挡。详细参考istio的介绍。可以设置bitnami的networkPolicy.enabledfalse来解决。

具体情况

最近在尝试Service mesh,使用目前流行的Istio。但是在搭建数据库的时候出现了问题,我发现数据库的3306端口居然被禁止访问。

由于是开启了Istio才会出现禁止访问的情况,以此为线索直接搜索得到了一个看起来很相关的结果:Server First协议

可是尝试了各种解决方法,问题照旧。同时解决的过程中也看到很多人在询问这个问题,更加坚定了是Istio出现了问题。

于是倒霉蛋在网上兜兜转转好几天,还是无解。甚至还尝试了PostgreSQL,想着说不定会没问题。当然这里还是用的bitnami的打包。就当要放弃的时候,看到一个postgres-operator的issue,抱着试一下的态度尝试了一下,发现居然顺利连接。

问题部分解决,下面只需要看看这两者之间的差异,就能知道原因了。当我自己部署bitnami的镜像,而不是他的Helm charts,我发现也是能正常使用的,这就奇怪了,难不成他还搞了什么奇怪的限制?

翻看具体的实现,给我找到了一个关键文件networkpolicy.yaml。删除之后一切通畅,用这个再去查找,就能轻松找到具体的原因。