You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Azure Kubernetes Service中暴露MySQL数据库Pod至外部网络的技术咨询

在Azure Kubernetes Service中暴露MySQL数据库Pod至外部网络的技术咨询

你好!问题出在你当前的Service配置上——你用的是ClusterIP类型的Service,这种类型的Service仅允许集群内部的Pod或节点访问,外部客户端(比如MySQL Workbench)没法直接连接。要让外部能访问你的MySQL实例,需要把Service类型改成LoadBalancer或者NodePort,在AKS环境里推荐用LoadBalancer,因为它会自动创建Azure公共负载均衡器并分配公网IP,配置更简便。

解决方案步骤:

  1. 修改Service的类型为LoadBalancer
    把你现有的Service YAML里的spec.type从ClusterIP改成LoadBalancer,同时建议显式指定targetPort(和容器端口保持一致,避免歧义)。修改后的Service配置如下:

    apiVersion: v1
    kind: Service
    metadata:
      name: mysql-db-testing-service
      namespace: testing
    spec:
      type: LoadBalancer
      ports:
      - port: 3306
        targetPort: 3306  # 和容器的containerPort对应
        protocol: TCP
      selector:
        app: mysql-db-testing
    

    另外,为了安全,你可以添加loadBalancerSourceRanges字段,只允许特定IP段访问你的数据库,比如:

    spec:
      # ... 其他配置
      loadBalancerSourceRanges:
        - "192.168.1.1/32"  # 替换成你自己的公网IP,限制仅该IP能访问
    
  2. 应用更新后的配置
    用kubectl命令重新应用修改后的YAML文件:

    kubectl apply -f your-updated-yaml-file.yaml -n testing
    
  3. 获取外部访问地址
    执行以下命令查看Service的状态,等EXTERNAL-IP列从<pending>变成一个公网IP:

    kubectl get svc mysql-db-testing-service -n testing
    

    输出大概像这样:

    NAME                      TYPE           CLUSTER-IP    EXTERNAL-IP      PORT(S)          AGE
    mysql-db-testing-service  LoadBalancer   10.0.0.123    20.xx.xx.xx      3306:30xxx/TCP   5m
    
  4. 配置Azure网络安全组(NSG)
    AKS会自动为LoadBalancer配置NSG规则,但如果你的节点池NSG有严格限制,需要确保允许3306端口的入站流量(或者你在Service里指定的NodePort端口,如果用NodePort类型的话)。

  5. 测试外部连接
    现在你可以用MySQL Workbench或者其他客户端,填写以下信息连接:

    • Host: 上面获取的EXTERNAL-IP
    • Port: 3306
    • Username: root
    • Password: test12345(你在Deployment里设置的密码)

重要安全提醒:

  • 不要明文存储密码:你当前在Deployment里直接写了MYSQL_ROOT_PASSWORD的明文值,这非常不安全。建议用Kubernetes Secret存储密码,创建命令如下:
    kubectl create secret generic mysql-root-secret -n testing --from-literal=MYSQL_ROOT_PASSWORD=test12345
    
    然后修改Deployment的env部分,从Secret读取密码:
    env:
    - name: MYSQL_ROOT_PASSWORD
      valueFrom:
        secretKeyRef:
          name: mysql-root-secret
          key: MYSQL_ROOT_PASSWORD
    
  • 限制访问源:一定要用loadBalancerSourceRanges限制仅信任的IP能访问数据库,避免全网暴露带来的安全风险。
  • MySQL绑定地址:官方MySQL镜像默认已经设置bind-address=0.0.0.0(允许所有地址访问),如果你有自定义配置文件,要确保不要改成仅本地访问的地址。

备注:内容来源于stack exchange,提问作者Krzysztof Michalski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 14:49:09