【问题标题】:Kubernetes Access External IP via Port and not NodePortKubernetes 通过端口而不是 NodePort 访问外部 IP
【发布时间】:2021-10-20 13:25:21
【问题描述】:

我是 Kubernetes 和 Helm Charts 的新手,希望在这里找到我的问题的答案。

当我运行 kubectl get all 并在服务下查看时,我得到如下信息:

NAME             TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)                        AGE
service/leader   LoadBalancer   10.3.245.137   104.198.205.71   80:30125/TCP, 8888:30927/TCP   54s

我的服务在我的 Helm Chart 中配置为:

ports:
  name: api
  port: 80
  targetPort: 8888 

  name: api2
  port: 8888
  targetPort: 8888

当我运行kubectl describe svc leader 时,我得到:

Type:        LoadBalancer
Port:        api 80/TCP
TargetPort:  8888/TCP 
NodePort:    api 30125/TCP
EndPoints:   <some IP>:8888
Port:        api 8888/TCP
TargetPort:  8888/TCP 
NodePort:    api 30927/TCP
EndPoints:   <some IP>:8888

我一直认为NodePort 是在外部公开我的集群的端口,而端口将是在内部服务上公开的端口,它路由到 Pod 上的TargetPorts。我从here 那里得到了这个理解。

但是,我似乎可以打开 104.198.205.71:80104.198.205.71:8888,但我不能打开 104.198.205.71:30125104.198.205.71:30927。我的期望是我应该能够通过NodePorts 访问 104.198.205.71,而不是通过端口。我的理解有误吗?

【问题讨论】:

  • 通过nodePort访问,需要使用node外网IP。 kubectl get node -owide 应该给你节点的IP。
  • 我明白了。我可以选择通过端口访问是否有意义?我认为端口仅在集群内部公开,如果我尝试在浏览器中这样做,我会假设像 :80 这样的东西会失败。
  • 在您认为端口80 工作的**节点**(不是容器)中。检查sudo netstat -tulnp |grep-w 80

标签: kubernetes kubernetes-helm kubernetes-service


【解决方案1】:

此外,要了解更多关于使用 Publishing Services 从集群外部访问资源的信息(此处还提到了 NodePort),您可以参考the official documentation

【讨论】:

    【解决方案2】:

    要通过 NodePort 访问您的应用程序,您需要点击您的节点 ip 和您已分配的节点端口。

    kubectl get node -owide 
    

    上面的命令会给你的节点IP地址,你可以用它来通过NodePort访问应用程序,是的,外部IP:80将失败,因为端口是用于内部容器而不是用于外部访问。

    【讨论】:

    • 您好,感谢您的回复!但出于某种原因,外部 IP:80 似乎对我有用,我想知道为什么会这样。
    猜你喜欢
    • 2020-09-18
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 2016-08-09
    • 2017-10-06
    • 1970-01-01
    • 2023-01-18
    • 1970-01-01
    相关资源
    最近更新 更多