ローカルkubernetesインストール(1つのマスターと1つのノード、両方ともoracle linux)でmysqlサーバーインスタンスを公開しようとしていますが、ポッドにアクセスできない。ローカルインストール時にkubernetesポッドへのリモートアクセスを有効にする
ポッド構成はこれです:
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.
kube-proxyがすべての着信接続に対してポート30306でリッスンしていることがnetstatでわかります。
tcp6 6 0 :::30306 :::* LISTEN 53039/kube-proxy
しかし、どういうわけか私はローカルホストでもmysqlからの応答を得られません。通常のMySQLのインストールのに対し
# telnet localhost 30306
Trying ::1...
Connected to localhost.
Escape character is '^]'.
は、以下のようなもので応答:
$ telnet [REDACTED] 3306
Trying [REDACTED]...
Connected to [REDACTED].
Escape character is '^]'.
N
[REDACTED]-log�gw&TS(gS�X]G/Q,(#uIJwmysql_native_password^]
最後の行で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
しかし、私は、「ノードが」EXTERNAL-IPの欄に何を意味するか理解していません。
私は、マスターIP(好ましくは)を介してmysqlサービスへのアクセスを開くことを望んでいます。どうしたらいいですか、私は何が間違っていますか?
何らかの理由でファイアウォールがkubernetes-proxyを妨害していたため、私はポート上でtelnet経由で接続できましたが、サーバからの応答はありませんでした。私は依然として、クライアントを単一のサーバーに接続させる方法をまだ分かりません。これは、すべての接続をミニオンに透過的にルーティングします。 –