2016-06-16 54 views
0

我也試圖在本地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服務(最好)。我該怎麼做,我做錯了什麼?

回答

1

我仍然不知道如何使客戶端連接到一臺服務器,它透明地路由到爪牙所有連接。

- >爲此,您需要一個負載均衡器,這不幸並不是默認的Kubernetes構建集團。

您需要設置一個反向代理,將流量發送到minion,比如nginx pod和使用hostPort: <port>的服務,這些服務會將端口綁定到主機。這意味着pod需要保留在該節點上,並且要這樣做,您希望使用使用節點名稱作爲選擇器的DaemonSet

顯然,這不是很容錯,因此您可以設置多個反向代理並使用DNS循環解析將流量轉發到其中一個代理窗格。

在某個地方,您需要一個固定的IP通過互聯網與您的服務通話,因此您需要確保有一個靜態窗格可以處理該窗口。

1

NodePort通過kube-proxy服務暴露在集羣中的每個節點上。要連接,使用主機的IP(NODE01)連接到:

telnet [IpOfNode] 30306

+0

由於某些原因防火牆干擾了kubernetes-proxy,我可以通過端口上的telnet進行連接,但是我沒有從服務器獲得答案。我仍然不確定如何讓客戶端連接到單個服務器,並將所有連接透明地路由到服務器。 –