首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在本地安装时可远程访问kubernetes吊舱

问在本地安装时可远程访问kubernetes吊舱
EN

Stack Overflow用户
提问于 2016-06-16 14:29:39
回答 2查看 1.4K关注 0票数 2

我还试图在本地kubernetes安装( oracle linux上的一个主服务器和一个节点)上公开一个mysql服务器实例,但我无法访问这个吊舱。

吊舱的配置如下:

代码语言:javascript
复制
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

以及服务文件:

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  labels:
    name: mysql
  name: mysql
spec:
  type: NodePort 
  ports:
   - port: 3306
      targetPort: 3306
      nodePort: 30306
  selector:
    name: mysql

我能看到吊舱在运行:

代码语言:javascript
复制
# kubectl get pod mysql
NAME      READY     STATUS    RESTARTS   AGE
mysql     1/1       Running   0          3d

服务连接到端点:

代码语言:javascript
复制
# 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。

代码语言:javascript
复制
tcp6       6      0 :::30306                :::*                    LISTEN      53039/kube-proxy

但不知何故,即使在本地主机上,我也没有得到mysql的响应。

代码语言:javascript
复制
# telnet localhost 30306
Trying ::1...
Connected to localhost.
Escape character is '^]'.

然而,正常的mysql安装使用以下内容进行响应:

代码语言:javascript
复制
$ 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输出:

代码语言:javascript
复制
$ 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服务的访问(最好是)。我怎么做到的,我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-22 17:27:25

我仍然不确定如何使客户端连接到一个服务器,该服务器透明地将所有连接路由到从属服务器。

要做到这一点,->需要一个负载均衡器,不幸的是,这不是一个默认的Kubernetes构建块。

您需要设置一个反向代理,将流量发送给仆从,比如一个nginx和一个使用hostPort: <port>将端口绑定到主机的服务。这意味着吊舱需要停留在该节点上,要做到这一点,您需要使用一个使用节点名称作为选择器的DaemonSet。

显然,这不是非常容错,所以您可以设置多个反向代理,并使用DNS循环解析将流量转发到代理荚之一。

在某个地方,在某个时刻,你需要一个固定的IP来通过互联网与你的服务对话,所以你需要确保在某个地方有一个静态吊舱来处理这个问题。

票数 1
EN

Stack Overflow用户

发布于 2016-06-16 14:50:17

NodePort通过kube服务在集群中的每个节点上公开。若要连接,请使用该主机(Node01)的IP连接到:

telnet [IpOfNode] 30306

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37862137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档