AKS(Kubernetes)上的phpMyAdmin连接azure MariaDb失败,原因是“没有这样的文件或目录”

iugsix8n  于 2022-11-08  发布在  Kubernetes
关注(0)|答案(2)|浏览(137)

我在Azure上使用SSL运行MariaDB PaaS,在AKS上运行phpMyAdmin。通过尝试连接,我得到了一条非常不清楚的消息:Cannot log in to the MySQL servermysqli::real_connect(): (HY000/2002): No such file or directory
在这一点上,ssl不是问题所在。我已经尝试了同样的方法,但没有在数据库端强制实施ssl,并且配置了没有ssl设置的phpmyadmin。
我还成功地使用curl -v telnet://my-database-12345.mariadb.database.azure.com:3306测试了phpmyadmin pod的连接性。
这是我如何尝试让phpmyadmin与azure mariadb一起工作:

apiVersion: v1
kind: Namespace
metadata:
  name: pma
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: pma-cfg
  namespace: pma
  labels:
    app: phpmyadmin
data:
  config-user-inc: |
    <?php
      $i = 0;
      $i++;
      $cfg['Servers'][$i]['auth_type'] = 'cookie';
      $cfg['Servers'][$i]['host'] = 'my-database-12345.mariadb.database.azure.com';
      $cfg['Servers'][$i]['port'] = '3306';
      $cfg['Servers'][$i]['ssl'] = true;
      $cfg['Servers'][$i]['ssl_ca'] = 'ssl/BaltimoreCyberTrustRoot.crt.pem';
      $cfg['Servers'][$i]['ssl_verify'] = false;
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: ssl-cert
  namespace: oneup
  labels:
    app: phpmyadmin
data:
  ssl-cert: |
    -----BEGIN CERTIFICATE-----
    # truncated BaltimoreCyberTrustRoot.crt
    -----END CERTIFICATE-----
---
apiVersion: v1
kind: Service
metadata:
  name: internal-pma
  namespace: pma
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-internal: "true"
spec:
  type: LoadBalancer
  loadBalancerIP: 10.xxx.xxx.xxx
  ports:
    - port: 80
      targetPort: pma
  selector:
    app: pma
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: pma
  namespace: pma
  labels:
    app: pma
spec:
  replicas: 1
  selector:
    matchLabels:
      app: pma
  template:
    metadata:
      labels:
        app: pma
    spec:
      containers:
        - name: pma
          image: phpmyadmin/phpmyadmin
          ports:
            - containerPort: 80
              name: pma
          volumeMounts:
            - name: pma-cfg
              mountPath: /etc/phpmyadmin/
            - name: ssl-cert
              mountPath: /etc/phpmyadmin/ssl/
      volumes:
        - name: pma-cfg
          configMap:
            name: pma-cfg
            items:
              - key: config-user-inc
                path: config.user.inc.php
        - name: ssl-cert
          configMap:
            name: ssl-cert
            items:
              - key: ssl-cert
                path: BaltimoreCyberTrustRoot.crt.pem

非常感谢!

fdx2calv

fdx2calv1#

当为phpmyadmin挂载一个自定义配置而不使用任何环境变量时(如果使用ssl,这是必需的),映像不会生成默认的配置文件。
例如:如果您启动pod,如下所示:

apiVersion: apps/v1
...
    spec:
      containers:
        - name: pma
          image: phpmyadmin/phpmyadmin
          env:
            name: PMA_HOST
            value: myhost.local
          ports:
            - containerPort: 80
              name: pma

将在/etc/phpmyadmin中生成config.inc.php文件
通过挂载config.user.inc.php,将不会生成任何config.inc.php
我所做的
正在从configMap中的/var/www/html/config.sample.inc.php复制内容,并对我的azure mariadb进行必要的更改:
配置Map:

apiVersion: v1
kind: ConfigMap
metadata:
  name: pma-cfg
  namespace: pma
  labels:
    app: pma
data:
  config-inc: |
    <?php
    declare(strict_types=1);
    $cfg['blowfish_secret'] = '*****'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
    $i = 0;
    $i++;

    /* Authentication type */
    $cfg['Servers'][$i]['auth_type'] = 'cookie';
    /* Server parameters */
    $cfg['Servers'][$i]['host'] =  'mydb123456.mariadb.database.azure.com';
    $cfg['Servers'][$i]['compress'] = false;
    $cfg['Servers'][$i]['AllowNoPassword'] = false;

    /* SSL */
    $cfg['Servers'][$i]['ssl'] = true;
    $cfg['Servers'][$i]['ssl_ca'] = '/etc/phpmyadmin/ssl/BaltimoreCyberTrustRoot.crt.pem';
    $cfg['Servers'][$i]['ssl_verify'] = true;

    /* Directories for saving/loading files from server */
    $cfg['UploadDir'] = '';
    $cfg['SaveDir'] = '';

  ssl-cert: |
    -----BEGIN CERTIFICATE-----
    # Trunkated BaltimoreCyberTrustRoot.crt
    -----END CERTIFICATE-----

最后,将配置Map装载到部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pma
  namespace: pma
  labels:
    app: pma
spec:
  replicas: 1
  selector:
    matchLabels:
      app: pma
  template:
    metadata:
      labels:
        app: pma
    spec:
      containers:
        - name: pma
          image: phpmyadmin/phpmyadmin
          ports:
            - containerPort: 80
              name: pma
          volumeMounts:
            - name: pma-cfg
              mountPath: /etc/phpmyadmin/
      volumes:
         - name: pma-cfg
           configMap:
             name: pma-cfg
             items:
               - key: config-inc
                 path: config.inc.php
               - key: ssl-cert
                 path: ssl/BaltimoreCyberTrustRoot.crt.pem

也许它也会帮助其他人。
干杯干杯干杯

um6iljoc

um6iljoc2#

您遇到的错误是一个已知问题,可以通过restarting MSSQL服务器或执行以下更改来解决:

$cfg['Servers'][$i]['host'] = 'my-database-12345.mariadb.database.azure.com';
to

$cfg['Servers'][$i]['host'] = '127.0.0.1'

您可以参考此SO thread以了解更多信息和故障排除

相关问题