从集群外部连接到有状态集内的特定Pod

时间:2019-12-11 10:30:22

标签: kubernetes

我有一个StatefulSet,它与 StatefulSet Kubernetes tutorial创建一个mysql主/从结构。我有以下kubernetes对象:

    NAME          READY   STATUS    RESTARTS   AGE
pod/mysql-0   2/2     Running   7          23h
pod/mysql-1   2/2     Running   6          23h
pod/mysql-2   2/2     Running   6          23h

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/kubernetes   ClusterIP   10.152.183.1    <none>        443/TCP    21d
service/mysql        ClusterIP   None            <none>        3306/TCP   23h
service/mysql-read   ClusterIP   10.152.183.89   <none>        3306/TCP   23h

NAME                     READY   AGE
statefulset.apps/mysql   3/3     23h

编辑:mysql和mysql-read服务与所有mysql pod连接。

该节点在我的计算机上,我正在使用microk8s。

现在,我有一个要在我的计算机上运行的小程序(不在群集中),我想将其连接到StatefulSet内部的主机(mysql-0)。身份证需要类似服务,只能与mysql-0连接。 有任何建议吗?

编辑:想法是找到一个解决方案,使我可以仅使用.yaml文件来部署群集。找到一个比kubectl apply

包含更多命令的命令没有意思

程序如下:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost??",
  user="root",
  passwd="",
  database="testtable"
)

mycursor = mydb.cursor()

sql = "INSERT INTO testtable (name) VALUES (%s)"
val = ("holaquetal")
mycursor.execute(sql, val)

mydb.commit()

我想我可以在mysql-0 pod上添加一个不同的标签,并添加一个寻找该标签的NodePort服务,但是我不想通过命令行来完成。 是否可以在StatefulSet yaml中向mysql-0添加一个标签?

另一个想法可能是对microk8s提供的DNS服务器进行查询DNS,寻找“ mysql.mysql-0”,但是我不知道如何将程序连接到DNS服务器,这样我就可以使用host=mysql.mysql-0或整个CNAME。

1 个答案:

答案 0 :(得分:2)

如果该节点在您的计算机上,则可以使用port-forward将mysql的端口从Pod转发到本地。试试这个:

kubectl port-forward mysql-0 3306:3306

或直接转发到您的主服务

kubectl port-forward svc/mysql-read 3306:3306