Mysql在Kubernetes pod中运行时被拒绝访问
我正在建立一个K8s集群,我从数据库开始。我使用Kustomize来实现这个目的。我使用Docker Desktop for Windows 10附带的Kubernetes 当我运行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
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./
后,它开始按预期工作。