我也試圖在本地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進行連接,但是我沒有從服務器獲得答案。我仍然不確定如何讓客戶端連接到單個服務器,並將所有連接透明地路由到服務器。 –