【问题标题】:NodePort conflicts wiht kube-apiserver's hostPortNodePort 与 kube-apiserver 的 hostPort 冲突
【发布时间】:2020-12-31 22:38:45
【问题描述】:

我有一个健康的 k8s 集群。 kube-apiserver 正在使用端口 8443。 然后我做类似下面的事情。我也创建/编辑了一个服务并分配了一个固定的 nodePort 8443

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376
      nodePort: 8443

集群变得无法访问。如果我运行命令kubectl get pods。它返回Unable to connect to the server: EOF

因为我需要运行 kubectl 命令来更改 nodePort。但我不能使用 kubectl。它变成了一个死循环。我有 2 个问题。

  1. 如何才能恢复我的 k8s 集群?
  2. 为什么 kube-apiserver 或其他组件不阻止我将 nodePort 更改为 8443?表明端口 8443 已在使用中。

【问题讨论】:

  • 如果使用端口,服务创建应该会失败(请参阅API docs。如果没有发生这种情况,您可能想在 GitHub 上打开一个问题。虽然我认为 api-server 通常使用端口第6443章
  • 你也许可以直接与 etcd 对话,无需使用 kubectl(参见 etcd docs

标签: kubernetes kube-apiserver service-node-port-range


【解决方案1】:

kube-apiserver pod 是 kubelet 使用主节点上的 /etc/kubernetes/manifests/kube-apiserver.yaml 文件启动的静态 pod

所以你可以编辑 /etc/kubernetes/manifests/kube-apiserver.yaml , 其中 8443 端口被引用并将其更改为未使用的端口。这样 kube-apiserver 将在该端口上可用。理想情况下,kubelet 会在其清单文件更改时尝试重新启动静态 pod。

您需要编辑 ~/.kube/config ,其中“服务器”地址需要更改为新端口。

删除有问题的节点端口服务。

还原您在 /etc/kubernetes/manifests/kube-apiserver.yaml 和 .kube/config 文件中的更改以返回原始端口 (8443)

【讨论】:

    【解决方案2】:

    当端口范围设置为默认service-node-port-rangeapi-server flag时应该不可能。

    --service-node-port-range portRange 默认值:30000-32767
    为具有 NodePort 可见性的服务预留的端口范围。示例:“30000-32767”。包含在范围的两端。


    我该怎么做才能恢复我的 k8s 集群?

    您可以更改/etc/kubernetes/manifests/kube-apiserver.yaml 文件并将所有出现的8443 重新替换为例如6443.

    然后连接到 apiserver:

    $ kubectl --server https://<ip>:6443 ...
    

    删除my-service服务并将kube-apiserver.yaml文件恢复为之前的形式。


    为什么 kube-apiserver 或其他组件不会阻止我将 nodePort 更改为 8443?表明8443端口已经在使用中。

    我不认为很多人会遇到这个问题,因为人们通常使用默认值为--service-node-port-range 标志的api-server,即:30000-32767。在这种情况下,您会看到此错误:

    The Service "my-service" is invalid: spec.ports[0].nodePort: Invalid value: 8443: provided port is not in the valid range. The range of valid ports is 30000-32767
    

    也许你能用它做的最好的事情是在 k8s github repo 上询问 k8s 开发人员。只是open an issue 和那里的这个问题。

    【讨论】:

      猜你喜欢
      • 2020-06-16
      • 2018-11-15
      • 2019-05-08
      • 2020-12-31
      • 2017-08-06
      • 2018-10-25
      • 1970-01-01
      • 2019-10-02
      • 2018-11-28
      相关资源
      最近更新 更多