OKE Kubernetes集群内应用无法连接同VCN下内网Oracle MySQL实例求助
排查步骤
- 确认应用部署的命名空间
你创建的mysql-devService位于development命名空间下,若应用没有部署在development命名空间,直接使用mysql-dev作为主机名无法完成DNS解析,需要修改配置为完整域名:mysql-dev.development.svc.cluster.local
- 确认应用部署的命名空间
- 集群内基础连通性验证
启动一个临时测试Pod排查基础网络能力,避免应用本身配置问题干扰排查:
在Pod内依次执行测试:# 启动临时mysql客户端Pod,替换<your-app-namespace>为应用实际的命名空间 kubectl run -n <your-app-namespace> -it --rm --image=mysql:8.0 --restart=Never mysql-client -- bash- 验证DNS解析:
nslookup mysql-dev(同命名空间)或nslookup mysql-dev.development.svc.cluster.local(跨命名空间),确认可以正常解析到ClusterIP - 验证Service连通性:
nc -zv mysql-dev 3306,确认端口可达 - 直接验证数据库连通性:
mysql -h <DB INTERNAL IP> -u <USERNAME> -p<PASSWORD>,确认直接访问数据库IP可以正常登录
- 集群内基础连通性验证
- 验证Service与Endpoints配置正确性
执行以下命令检查资源配置:
确认:kubectl get svc mysql-dev -n development kubectl get endpoints mysql-dev -n development- Service没有配置
selector字段(手动关联Endpoints的Service不能指定Selector,否则集群会自动覆盖你手动创建的Endpoints资源) - Endpoints的
ADDRESSES字段与数据库实际内网IP一致,端口为3306,无NotReady状态
- 验证Service与Endpoints配置正确性
- 检查OCI层网络规则
同VCN同子网资源默认也可能受安全规则限制,需要确认:
- 数据库实例关联的子网安全列表/网络安全组(NSG),已添加入站规则:允许OKE集群的Pod CIDR、节点CIDR访问3306端口
- OKE集群节点/Pod关联的NSG/安全列表,已添加出站规则:允许访问数据库内网IP的3306端口
- 检查OCI层网络规则
- 检查Kubernetes集群网络限制
- 若集群配置了
NetworkPolicy,确认没有规则禁止应用访问mysql-devService或数据库内网IP的3306端口 - 若你用的是Calico等支持网络策略的CNI插件,确认没有全局配置的网络隔离规则阻断流量
- 验证数据库本身配置
- 确认MySQL的
bind-address配置为0.0.0.0或其自身内网IP,未绑定127.0.0.1 - 确认你使用的数据库账号允许从应用Pod的IP段登录,可在数据库端执行
SELECT user,host FROM mysql.user WHERE user='<USERNAME>';检查权限
内容的提问来源于stack exchange,提问作者jmcglock
相关产品推荐
相关产品推荐

