如何通过GCP Kubernetes集群从指定公网IP访问MariaDB 3306端口
解决方案:将MariaDB端口开放给特定公网IP
我来帮你一步步搞定这个问题——要让你的桌面静态IP能访问K8s集群里的MariaDB,需要先通过Kubernetes Service暴露端口,再结合GCP的防火墙规则做访问限制,具体步骤如下:
1. 创建Kubernetes Service暴露MariaDB端口
你的Deployment已经正常运行,但Pod的端口还没对外暴露,得先创建一个Service来打通外部访问的通道。新建一个mariadb-service.yaml文件,内容如下:
apiVersion: v1 kind: Service metadata: name: mariadb-service spec: type: LoadBalancer selector: app: mariadb # 必须和Deployment里的Pod标签完全匹配 ports: - protocol: TCP port: 3306 # 外部访问时用的端口 targetPort: 3306 # 对应Pod内部的MariaDB端口
执行命令应用这个Service:
kubectl apply -f mariadb-service.yaml
等待1-2分钟让GCP分配外部负载均衡IP,用下面的命令查看状态:
kubectl get service mariadb-service
当EXTERNAL-IP列显示出一个公网IP时,就可以进入下一步了。
2. 在GCP配置防火墙规则限制访问
为了避免端口被无关IP访问,需要在GCP里设置防火墙规则,仅允许你的桌面静态IP访问3306端口:
- 打开Google Cloud控制台,进入VPC网络 > 防火墙页面
- 点击创建防火墙规则,填写以下信息:
- 名称:比如
allow-mariadb-from-my-static-ip - 网络:选择你的K8s集群所在的VPC(通常是
default) - 优先级:设为1000(比默认规则优先级高即可)
- 方向:入站
- 目标:选择指定的目标标签,输入你K8s集群节点的标签(可以在GCE实例页面查看,一般是
kubernetes-node) - 源IP范围:填写你的桌面静态IP,格式为
X.X.X.X/32(比如114.114.114.114/32) - 协议和端口:选择指定的协议和端口,勾选
tcp并填写3306
- 名称:比如
- 点击创建完成规则配置
3. 测试连接
现在用桌面的MariaDB客户端尝试连接:
mysql -h <刚才获取的EXTERNAL-IP> -u <你Deployment里设置的USER> -p
输入你配置的密码,就能成功连接到集群里的MariaDB了。
额外提示
- 如果你不想用LoadBalancer类型的Service,也可以选择
NodePort类型(会分配30000-32767之间的端口),此时防火墙规则里的端口要改成这个NodePort,源IP限制保持不变。 - 确认你Deployment里的
<USER>和<PASSWORD>已经替换成实际的账号密码,避免连接失败。 - 你的K8s版本是1.8.6,上述YAML的apiVersion完全兼容,无需修改。
内容的提问来源于stack exchange,提问作者ufk
相关产品推荐
相关产品推荐

