如何通过OCI LoadBalancer将OKE上的MySQL InnoDB集群暴露至公网?
借助OCI LoadBalancer暴露OKE上的MySQL InnoDB集群至公网
前提说明
- MySQL InnoDB集群由MySQL Operator通过Helm部署,Pod监听
6446(MySQL X协议)和6447(经典MySQL协议)端口 - 当前可通过ClusterIP+exec命令连接Pod,OKE集群运行正常
具体实现步骤
1. 创建LoadBalancer类型的Service
通过Kubernetes YAML配置文件创建LoadBalancer Service,关联MySQL集群Pod:
创建mysql-lb-service.yaml文件,替换占位符为实际信息:
apiVersion: v1 kind: Service metadata: name: mysql-innodb-cluster-lb namespace: <你的集群命名空间> # 比如默认的mysql-operator spec: type: LoadBalancer ports: - name: mysql-classic port: 3306 # 公网访问的经典协议端口,可自定义 targetPort: 6447 # 对应Pod的经典协议监听端口 protocol: TCP - name: mysql-x port: 33060 # 公网访问的X协议端口,可自定义 targetPort: 6446 # 对应Pod的X协议监听端口 protocol: TCP selector: mysql.oracle.com/cluster: <你的MySQL集群名称> # 替换为实际集群名称
2. 部署Service配置
执行命令应用该Service:
kubectl apply -f mysql-lb-service.yaml
3. 获取LoadBalancer公网IP
执行命令查看Service状态,等待OCI分配公网IP:
kubectl get service mysql-innodb-cluster-lb -n <你的命名空间>
当EXTERNAL-IP列显示公网IP时,说明配置生效。
4. 配置OCI安全组规则
登录OCI控制台,为OKE集群节点所在安全组添加入站规则:
- 进入网络 > 安全列表,找到目标安全组
- 添加两条规则:
- 协议:TCP,源:按需设置(建议指定信任IP范围,而非
0.0.0.0/0),端口范围:3306 - 协议:TCP,源:同上述范围,端口范围:33060
- 协议:TCP,源:按需设置(建议指定信任IP范围,而非
- 保存规则,确保流量能到达LoadBalancer
5. 测试公网连接
使用MySQL客户端测试经典协议连接:
mysql -h <LoadBalancer公网IP> -P 3306 -u <用户名> -p
或测试X协议连接:
mysqlsh --uri <用户名>@<LoadBalancer公网IP>:33060
注意事项
- 公网暴露数据库存在安全风险,严格限制访问源IP,避免开放全量公网访问
- 确保MySQL用户权限允许从公网IP连接(例如创建用户时指定
'username'@'%') - 如需固定公网IP,可在OCI申请预留公网IP,然后在Service的
metadata.annotations中添加oci.oracle.com/load-balancer-public-ip: <预留IP>
内容的提问来源于stack exchange,提问作者ZZzzZZzz
相关产品推荐
相关产品推荐

