繁体   English   中英

如何在Kubernetes上访问MySQL即服务?

[英]How do I access MySQL as a Service on Kubernetes?

我有以下部署...

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-data-disk
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-deployment
  labels:
    app: mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - name: mysql
          image: mysql:5.7
          ports:
            - containerPort: 3306
          volumeMounts:
            - mountPath: "/var/lib/mysql"
              subPath: "mysql"
              name: mysql-data
          env:
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mysql-secrets
                  key: ROOT_PASSWORD
      volumes:
        - name: mysql-data
          persistentVolumeClaim:
            claimName: mysql-data-disk

这很棒,我可以像这样访问数据库...

kubectl exec -it mysql-deployment-<POD-ID> -- /bin/bash

然后我跑...

mysql -u root -h localhost -p

而且我可以登录。 但是,当我尝试使用以下yaml将其作为服务访问时...

---
apiVersion: v1
kind: Service
metadata:
  name: mysql-service
spec:
  selector:
    app: mysql
  ports:
    - protocol: TCP
      port: 3306
      targetPort: 3306

我可以通过运行此kubectl describe service mysql-service来查看它...

Name:              mysql-service
Namespace:         default
Labels:            <none>
Annotations:       kubectl.kubernetes.io/last-applied-configuration:
                     {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"mysql-service","namespace":"default"},"spec":{"ports":[{"port":33...
Selector:          app=mysql
Type:              ClusterIP
IP:                10.101.1.232
Port:              <unset>  3306/TCP
TargetPort:        3306/TCP
Endpoints:         172.17.0.4:3306
Session Affinity:  None
Events:            <none>

我通过运行kubectl cluster-info获得IP

#kubectl cluster-info
Kubernetes master is running at https://192.168.99.100:8443
KubeDNS is running at https://192.168.99.100:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

但是当我尝试使用Oracle SQL Developer这样连接时...

在此处输入图片说明

它说它无法连接。

在此处输入图片说明

如何连接到在K8s上运行的MySQL?

在Pod网络外部将无法访问服务类型ClusterIP 如果没有LoadBalancer选项,则必须使用服务类型NodePortkubectl port-forward

  1. 您需要mysql服务的类型为NodePort而不是ClusterIP才能在Kubernetes之外访问它。

  2. 在客户端配置中使用节点端口

服务示例:

apiVersion: v1
kind: Service
metadata:
  name: mysql-service
spec:
  type: NodePort
  selector:
    app: mysql
  ports:
    - protocol: TCP
      port: 3306
      nodePort: 30036
      targetPort: 3306

因此,您可以在客户端中使用端口:30036。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM