当前位置: 首页 > 知识库问答 >
问题:

AWS上具有Kops的Kubernetes群集-节点端口服务不可用

岑炯
2023-03-14

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

球门

设置ALB入口控制器,以便我可以使用webockets和超文本传输协议/2

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

采取的步骤

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

使用该项目指定的IAM配置文件,使用自定义AWS密钥设置ALB入口控制器。

使用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的卷曲悬挂

卷曲

预期

从ALB和直接到节点的Curl:node-port应该返回200“Ok”(服务对根的超文本传输协议响应)

更新:在github上创建的问题引用了以上内容,在某些情况下提供了一些进一步的详细信息:

  • https://github.com/kubernetes/kubernetes/issues/50261

共有2个答案

卫焕
2023-03-14

主服务器的SG无需打开节点端口范围即可使:工作。

因此,只有工人的SG需要打开端口范围。

谷梁晟
2023-03-14

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

为了让集群外的流量到达节点端口,您必须在AWS上的EC2控制台中编辑EC2实例(即Kubernetes节点)的配置

在EC2控制台中单击“安全组”Kops应该将它为集群创建的原始安全组注释为节点。

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

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

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

这将允许internet上的任何人访问集群上的节点端口,因此请确保您希望这些节点端口公开。

或者,您可以只从ALB入口控制器为ALB创建的安全组中允许它,而不是从任何来源。但是,由于这些可以重新创建,因此可能需要修改关于修改kubernetes服务的规则。我建议显式地将节点端口指定为预先确定的已知节点端口,而不是随机分配的节点端口。

 类似资料:
  • 我有一个LoadBalancer服务,它在群集外公开3300端口。我想打开一个新的端口用于内部通信,以便其他吊舱可以与此服务对话,但此端口不应暴露在集群外部。 基本上,通信如下所示:

  • 我使用KOPS在AWS上部署了一个工作的基于Kubernetes Gossip的集群。在这个问题上,我部署了Fabric8。命令“gofabric8 validate”表示成功。 光栅

  • 我正在尝试访问库伯内特斯集群部署的Spring Boot微服务并尝试测试REST API。我在部署脚本中配置了节点端口方法。但是当我尝试使用Postman工具访问时,我只得到“无法获得任何响应”的响应。 我配置了服务。yaml脚本类似于以下结构, 我的部署。yaml如下所示:, 当我使用时,输出如下所示, 我正在尝试通过以下方式访问我部署的API, 更新 当我为我的部署运行命令时,我得到如下响应:

  • 我对container worrld是新手,并试图在两个linux VM中本地设置一个kubernetes集群。在集群初始化期间,它卡在 KubeADM-1.6.0-0.x86_64.rpm KubectL-1.6.0-0.x86_64.rpm Kubelet-1.6.0-0.x86_64.rpm

  • 我正在尝试运行一个3节点的Kubernetes集群。我已经启动并充分运行了集群,使得服务可以在不同的节点上运行。不幸的是,我似乎无法让基于NodePort的服务正确工作(就我所理解的正确性而言……)。我的问题是,我定义的任何NodePort服务都只能在其pod运行的节点上外部可用,我的理解是,它们应该在集群中的任何节点上外部可用。 一个例子是本地Jira服务,它应该在端口8082(内部)上运行,在

  • 上节课我们和大家学习了怎样用 Promethues 来监控 Kubernetes 集群中的应用,但是对于 Kubernetes 集群本身的监控也是非常重要的,我们需要时时刻刻了解集群的运行状态。 对于集群的监控一般我们需要考虑以下几个方面: Kubernetes 节点的监控:比如节点的 cpu、load、disk、memory 等指标 内部系统组件的状态:比如 kube-scheduler、kub