我也试图在本地kubernetes安装(1个主节点和一个节点,都在oracle linux上)公开一个mysql服务器实例,但我无法访问该pod 。启用本地安装远程访问kubernetes pod
该吊舱的配置是这样的:
apiVersion: v1
kind: Pod
metadata:
name: mysql
labels:
name: mysql
spec:
containers:
- resources:
limits :
cpu: 1
image: docker.io/mariadb
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: 123456
ports:
- containerPort: 3306
name: mysql
和业务文件:
apiVersion: v1
kind: Service
metadata:
labels:
name: mysql
name: mysql
spec:
type: NodePort
ports:
- port: 3306
targetPort: 3306
nodePort: 30306
selector:
name: mysql
我可以看到,吊舱正在运行:
# kubectl get pod mysql
NAME READY STATUS RESTARTS AGE
mysql 1/1 Running 0 3d
而且服务连接到一个端点:
# kubectl describe service mysql
Name: mysql
Namespace: default
Labels: name=mysql
Selector: name=mysql
Type: NodePort
IP: 10.254.200.20
Port: <unset> 3306/TCP
NodePort: <unset> 30306/TCP
Endpoints: 11.0.14.2:3306
Session Affinity: None
No events.
我可以在netstat上看到kube-proxy正在监听端口30306上的所有传入连接。
tcp6 6 0 :::30306 :::* LISTEN 53039/kube-proxy
但不知何故,即使在本地主机上,我也没有收到mysql的响应。
$ telnet [REDACTED] 3306
Trying [REDACTED]...
Connected to [REDACTED].
Escape character is '^]'.
N
[REDACTED]-log�gw&TS(gS�X]G/Q,(#uIJwmysql_native_password^]
注意MySQL的部分在最后一行:
# telnet localhost 30306
Trying ::1...
Connected to localhost.
Escape character is '^]'.
而正常的MySQL安装具有以下的一些响应。
最后要注意有这个kubectl输出:
$ kubectl get service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 <none> 443/TCP 9d
mysql 10.254.200.20 nodes 3306/TCP 1h
但我不明白什么是“节点”指的是在外部IP列。
所以我想要发生的是打开通过主IP访问MySQL服务(最好)。我该怎么做,我做错了什么?
由于某些原因防火墙干扰了kubernetes-proxy,我可以通过端口上的telnet进行连接,但是我没有从服务器获得答案。我仍然不确定如何让客户端连接到单个服务器,并将所有连接透明地路由到服务器。 –