繁体   English   中英

使用Kops的AWS上的Kubernetes群集 - NodePort服务不可用

[英]Kubernetes Cluster on AWS with Kops - NodePort Service Unavailable

我在Kubernetes集群上访问NodePort服务时遇到困难。

目标

设置ALB Ingress控制器,以便我可以使用websockets和http / 2

根据该控制器的要求设置NodePort服务

采取的步骤

以前在AWS eu-west-1上创建了Kops(版本1.6.2)集群。 添加了nginx入口的kops插件以及Kube-lego。 ELB入口工作正常。

使用该项目指定的IAM配置文件,使用自定义AWS密钥设置ALB Ingress Controller。

使用kubectl replace --force将服务类型从LoadBalancer更改为NodePort

> kubectl describe svc my-nodeport-service
Name:                   my-node-port-service
Namespace:              default
Labels:                 <none>
Selector:               service=my-selector
Type:                   NodePort
IP:                     100.71.211.249
Port:                   <unset> 80/TCP
NodePort:               <unset> 30176/TCP
Endpoints:              100.96.2.11:3000
Session Affinity:       None
Events:                 <none>

> kubectl describe pods my-nodeport-pod
Name:           my-nodeport-pod
Node:           <ip>.eu-west-1.compute.internal/<ip>
Labels:         service=my-selector
Status:         Running
IP:             100.96.2.11
Containers:
  update-center:
    Port:               3000/TCP
    Ready:              True
    Restart Count:      0

(ssh into node)
$ sudo netstat -nap | grep 30176
tcp6       0      0 :::30176                :::*                    LISTEN      2093/kube-proxy

结果

来自ALB的卷曲挂起

来自<public ip address of all nodes>:<node port for service>卷曲<public ip address of all nodes>:<node port for service>挂起

预期

从ALB和直接到节点:node-port的卷曲应返回200“Ok”(服务对根的http响应)

更新:在上面引用的github上创建的问题,在某些情况下还有一些进一步的细节:

默认情况下,Kops不会将EC2实例配置为允许来自外部的NodePort流量。

为了使群集外的流量能够到达NodePort,您必须编辑EC2实例的配置,这些实例是AWS上EC2控制台中的Kubernetes节点。

进入EC2控制台后,单击“安全组”。 Kops应该注释它为您的群集创建的原始安全组作为nodes.<your cluster name>master.<your cluster name>

我们需要修改这些安全组,以便将NodePort的默认端口范围内的流量转发到实例。

单击安全组,单击规则并添加以下规则。

要在节点和主节点上打开的端口范围 :30000-32767

安全组规则

这将允许互联网上的任何人访问群集上的NodePort,因此请确保您希望这些暴露。

或者,不是从任何原点允许它,而是只允许来自alb-ingress-controller为ALB创建的安全组。 但是,由于可以重新创建这些,因此可能需要修改对kubernetes服务的修改规则。 我建议明确指定NodePort它是一个预定的已知NodePort而不是一个随机分配的NodePort。

不需要master的SG来打开nodeport范围以便:工作。

因此只有Worker的SG需要打开端口范围。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM