问题
我正在尝试NodePort
在我的 Kubernetes 集群中创建一个类型的服务,但它没有按预期工作,我怀疑它必须这样做,因为我已经禁用了我的主节点上使用的 IAM 角色的 ELB 权限。我不认为 ELB 权限应该重要NodePort
,但我看到一条错误消息让我想到这一点。难道我做错了什么?这是其他人以前见过的已知问题吗?
试图
向我的集群部署了一个类型的服务NodePort
,期望能够在任何节点的公共 IP 和给定端口上访问我的服务,但我不能。有 1 个主节点和 2 个非主节点,除了主节点之外,甚至没有进程绑定到端口 30095(分配的NodePort
)。SSH 连接到主服务器并以各种方式卷曲该端口没有任何作用(curl
只是挂起)。卷曲与服务关联的端点可以正常工作。kubectl describe
在服务上表明创建负载均衡器时出现了一些错误,但我不知道为什么会这样做。
我将重申,我特别禁止主节点使用的 IAM 角色能够执行任何 ELB 操作。我不希望使用我的 Kubernetes 集群的开发人员能够在我的账户中启动 ELB,或者为此做任何会在我的账户中创建 AWS 资源的事情。
实际结果
有关服务的信息(从本地工作站运行的命令)——请注意以下
CreatingLoadBalancerFailed
输出中的错误kubectl describe service
:$ kubectl get services frontend -oyaml apiVersion: v1 kind: Service ---SNIP--- ports: - nodePort: 30095 port: 80 protocol: TCP targetPort: 80 selector: app: guestbook tier: frontend sessionAffinity: None type: NodePort status: loadBalancer: {} $ kubectl describe services frontend Name: frontend Namespace: default Labels: app=guestbook tier=frontend Selector: app=guestbook,tier=frontend Type: NodePort IP: 100.67.10.125 Port: <unset> 80/TCP NodePort: <unset> 30095/TCP Endpoints: 100.96.1.2:80,100.96.2.2:80,100.96.2.4:80 Session Affinity: None Events: FirstSeen LastSeen Count From SubObjectPath Type Reason Message --------- -------- ----- ---- ------------- -------- ------ ------- 1h 4m 15 {service-controller } Warning CreatingLoadBalancerFailed (events with common reason combined)
寻找绑定到非主节点端口的进程:
$ netstat -tulpn | grep 30095 # no output
寻找绑定到主节点端口的进程:
$ netstat -tulpn | grep 30095 tcp6 0 0 :::30095 :::* LISTEN 1540/kube-proxy
试图卷曲服务(只是挂起):
$ curl localhost:30095 # just hangs ^C $ curl -g -6 http://[::1]:30095 # just hangs ^C $ curl -vvvg -6 http://[::1]:30095 * Rebuilt URL to: http://[::1]:30095/ * Hostname was NOT found in DNS cache * Trying ::1... * Connected to ::1 (::1) port 30095 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.38.0 > Host: [::1]:30095 > Accept: */* > # just hangs after that ^C $ curl 100.67.10.125:30095 # just hangs ^C
从主节点卷曲端点(有效,因此 pod 运行良好):
$ curl 100.96.2.4 <html ng-app="redis"> <head> ---SNIP--- </body> </html>
预期结果
NodePort
卷曲服务分配的任何节点的外部 IP 时,预计会看到与卷曲端点相同的结果30095
。
额外细节:
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.1+82450d0", GitCommit:"82450d03cb057bab0950214ef122b67c83fb11df", GitTreeState:"not a git tree", BuildDate:"2016-12-14T04:09:31Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"darwin/amd64"} Server Version: version.Info{Major:"1", Minor:"4", GitVersion:"v1.4.6", GitCommit:"e569a27d02001e343cb68086bc06d47804f62af6", GitTreeState:"clean", BuildDate:"2016-11-12T05:16:27Z", GoVersion:"go1.6.3", Compiler:"gc", Platform:"linux/amd64"}
GitHub问题:https ://github.com/kubernetes/kubernetes/issues/39214
- 邮件列表帖子:https ://groups.google.com/forum/#!topic/kubernetes-dev/JNC_bk1L3iI