Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql在Kubernetes pod中运行时被拒绝访问_Mysql_Kubernetes - Fatal编程技术网

Mysql在Kubernetes pod中运行时被拒绝访问

Mysql在Kubernetes pod中运行时被拒绝访问,mysql,kubernetes,Mysql,Kubernetes,我正在建立一个K8s集群,我从数据库开始。我使用Kustomize来实现这个目的。我使用Docker Desktop for Windows 10附带的Kubernetes 当我运行kubectl apply-k./时,mysql播客正在运行。 然后我使用kubectl exec-it mysql--bash进入容器。 在那里之后,我尝试使用MySQL-u root-p连接到MySQL服务,我得到的只是 ERROR 1045 (28000): Access denied for user 'ro

我正在建立一个K8s集群,我从数据库开始。我使用Kustomize来实现这个目的。我使用Docker Desktop for Windows 10附带的Kubernetes

当我运行
kubectl apply-k./
时,mysql播客正在运行。 然后我使用
kubectl exec-it mysql--bash
进入容器。 在那里之后,我尝试使用
MySQL-u root-p
连接到MySQL服务,我得到的只是

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
如果我在
kustomization.yaml
中使用
secretGenerator
,或者将根密码直接放在部署定义中,都没有关系,我无法登录mysql。 我使用的是来自docker hub的mysql图像,所以没什么特别的

我还做了一个测试,由docker直接运行容器,例如

docker run -d --env MYSQL_ROOT_PASSWORD=dummy --name mysql-test -p 3306:3306 mysql:5.6
通过这样设置容器,我可以毫无问题地登录MySQL数据库

我不明白为什么在docker中运行的相同图像在Kubernetes中运行时表现不同。 也许你有什么想法

我的yaml文件如下所示:

存储设备

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
mysql-persistent-volume.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
spec:
  storageClassName: local-storage
  persistentVolumeReclaimPolicy: Retain
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  local:
    path: "/c/kubernetes/mysql-storage/"
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
          - key: kubernetes.io/hostname
            operator: In
            values:
            - docker-desktop
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
spec:
  storageClassName: local-storage
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
mysql-deployment.yaml

apiVersion: v1
kind: Service
metadata:
  name: mysql
  labels:
    app: mysql
spec:
  type: NodePort
  ports:
    - port: 3306
      protocol: TCP
      name: mysql-backend
  selector:
    app: mysql
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - image: mysql:5.6
          name: mysql
          imagePullPolicy: IfNotPresent
#          envFrom:
#          - secretRef:
#              name: mysql-credentials
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: dummy
          ports:
            - containerPort: 3306
              name: mysql
          volumeMounts:
            - name: mysql-persistent-storage
              mountPath: /var/lib/mysql
      volumes:
        - name: mysql-persistent-storage
          persistentVolumeClaim:
            claimName: mysql-pv-claim
kustomization.yaml

resources:
  - storage.yaml
  - mysql-persistent-volume.yaml
  - mysql-deployment.yaml
generatorOptions:
  disableNameSuffixHash: true
secretGenerator:
  - name: mysql-credentials
    literals:
      - MYSQL_ROOT_PASSWORD=dummy
#      - MYSQL_ALLOW_EMPTY_PASSWORD=yes

k8s保存了在
kustomization.yaml
中设置的第一个凭证。与此同时,我改变了它们,因此它们似乎被忽略了。从磁盘中删除存储文件夹并再次运行
kubectl apply-k./
后,它开始按预期工作。