如何访问我的kubernetes集群外的mysql?

时间:2017-03-28 19:48:44

标签: mysql docker architecture kubernetes

我在我的centos机器上运行kubernetes集群。 我不想为mysql创建一个pod。 MySQL安装在同一网络中的另一台机器上(机器不在kubernates专用网络中)。

如何从kubernetes集群中运行的pod中访问mysql服务?

我尝试使用以下配置的服务和终点。但是,没有运气。

apiVersion: v1
kind: Service
metadata:
  name: database
spec:
  ports:
  - port: 13080
    targetPort: 13080
    protocol: TCP
---
kind: Deployment
apiVersion: v1
metadata:
  name: database
subsets:
  - addresses:
      - ip: XX.XX.XX.XX
    ports:
      - port: 13080
---
kind: ReplicationController
metadata:
  name: test
spec:
  replicas: 1
  selector:
    app: test
  template:
    metadata:
      name: test
      labels:
        app: test
    spec:
      containers:
      - name: my_pods
        image: my_pods
        env:
         - name: DATABASE_HOST
           value: database
         - name: DATABASE_PORT
           value: "13080"
         - name: DATABASE_USER
           value: "SAAS"
         - name: DATABASE_PASSWORD
           value: "SAAS"
         - name: DATABASE_NAME
           value: "SAASDB"
        ports:
          - containerPort: 8080
      imagePullSecrets:
        - name: my-secret
---
apiVersion: v1
kind: Service
metadata:
  name: test-service
  labels:
    name: test-service
spec:
  type: NodePort
  ports:
     - port: 11544
       targetPort: 8080
       nodePort: 30600
  selector:
    name: test

2 个答案:

答案 0 :(得分:2)

您不需要为群集外的内容提供服务。根据您使用的网络模型,docker容器(即kubernetes pod)应该能够通过Docker设置的桥接器正常连接到MySQL容器。检查主机是否在端口3306上具有连接,并且确实如此,只需输入DNS名称(您的kube-dns pod应该将任何基于非kubernetes的请求转发给它所安排的主机的主机resolv.conf)

答案 1 :(得分:-1)

请试试这个:

kubectl delete svc database kubectl create service nodeport database --tcp=13080:13080

然后使用下面的cmd来获得正确的IP和端口

kubectl get svc database