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

目标

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

根据该 Controller 的要求设置NodePort服务

已采取的步骤

以前,在AWS eu-west-1上创建了Kops(版本1.6.2)集群。 Nginx Ingress的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>中的卷发挂起

预期的

从ALB到直接到node:node-port的 curl 都应返回200“Ok”(服务对根的http响应)

更新:
在github上创建的问题在某些情况下引用了上面的一些详细信息:
  • https://github.com/kubernetes/kubernetes/issues/50261
  • https://github.com/coreos/alb-ingress-controller/issues/169
  • https://github.com/kubernetes/kops/issues/3146
  • 最佳答案

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

    为了使群集外部的流量能够到达NodePort,您必须在AWS的EC2控制台中编辑EC2实例(即Kubernetes节点)的配置。

    在EC2控制台中,单击“安全组”。 Kops应该将它为群集创建的原始安全组注释为nodes.<your cluster name>master.<your cluster name>
    我们需要修改这些安全组,以将流量从NodePorts的默认端口范围转发到实例。

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

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

    amazon-web-services - 具有Kops的AWS上的Kubernetes集群-NodePort服务不可用-LMLPHP

    这将使互联网上的任何人都可以访问群集上的NodePort,因此请确保您要公开这些端口。

    另外,也可以仅从alb-ingress-controller为ALB创建的安全组中允许它,而不是允许它来自任何来源。但是,由于可以重新创建这些规则,因此可能有必要在修改kubernetes服务时修改规则。我建议为它明确指定NodePort是一个预定的已知NodePort,而不是随机分配的NodePort。

    关于amazon-web-services - 具有Kops的AWS上的Kubernetes集群-NodePort服务不可用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45543694/

    10-15 21:53