2016-06-16 40 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进行连接,但是我没有从服务器获得答案。我仍然不确定如何让客户端连接到单个服务器,并将所有连接透明地路由到服务器。 –