我还试图在本地kubernetes安装( oracle linux上的一个主服务器和一个节点)上公开一个mysql服务器实例,但我无法访问这个吊舱。
吊舱的配置如下:
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正在监听所有传入连接的端口30306。
tcp6 6 0 :::30306 :::* LISTEN 53039/kube-proxy但不知何故,即使在本地主机上,我也没有得到mysql的响应。
# telnet localhost 30306
Trying ::1...
Connected to localhost.
Escape character is '^]'.然而,正常的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部分。
最后,有一个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服务的访问(最好是)。我怎么做到的,我做错了什么?
发布于 2016-06-22 17:27:25
我仍然不确定如何使客户端连接到一个服务器,该服务器透明地将所有连接路由到从属服务器。
要做到这一点,->需要一个负载均衡器,不幸的是,这不是一个默认的Kubernetes构建块。
您需要设置一个反向代理,将流量发送给仆从,比如一个nginx和一个使用hostPort: <port>将端口绑定到主机的服务。这意味着吊舱需要停留在该节点上,要做到这一点,您需要使用一个使用节点名称作为选择器的DaemonSet。
显然,这不是非常容错,所以您可以设置多个反向代理,并使用DNS循环解析将流量转发到代理荚之一。
在某个地方,在某个时刻,你需要一个固定的IP来通过互联网与你的服务对话,所以你需要确保在某个地方有一个静态吊舱来处理这个问题。
发布于 2016-06-16 14:50:17
NodePort通过kube服务在集群中的每个节点上公开。若要连接,请使用该主机(Node01)的IP连接到:
telnet [IpOfNode] 30306
https://stackoverflow.com/questions/37862137
复制相似问题