kubernetes - NodePort 与 kube-apiserver 的 hostPort 冲突
问题描述
我有一个健康的 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 个问题。
- 我该怎么做才能恢复我的 k8s 集群?
- 为什么 kube-apiserver 或其他组件不会阻止我将 nodePort 更改为8443?指示端口8443已在使用中。
解决方案
kube-apiserver pod 是 kubelet 使用主节点上的 /etc/kubernetes/manifests/kube-apiserver.yaml 文件启动的静态 pod
因此您可以编辑 /etc/kubernetes/manifests/kube-apiserver.yaml ,其中引用了 8443 端口并将其更改为未使用的端口。这样 kube-apiserver 将在该端口上可用。理想情况下,kubelet 会在其清单文件更改时尝试重新启动静态 pod。
您需要编辑 ~/.kube/config ,其中“服务器”地址需要更改为新端口。
删除有问题的 nodeport 服务。
恢复您在 /etc/kubernetes/manifests/kube-apiserver.yaml 和 .kube/config 文件中的更改以返回原始端口 (8443)
推荐阅读
- node.js - 如何在 NodeJS 中使用 Array 输入重复相同的 Promise,直到它解析或 Array 结束?
- javascript - 文件上传进度条干扰控制器重定向
- r - 带有附加列的 R 频率表
- ruby-on-rails - 将 axlsx gem 与 conditional_formatting 一起使用
- pandas - 在列透视期间保留最后一个重复索引?
- c - 不同的字母程序,我不明白解决方案
- ssl - 使用 ClickOnce 部署的签名 VSTO 显示“未知发布者”
- html - 为什么 css 和图像未成功加载以及如何正确设置宽度?
- python - QThread 在线程仍在运行时被销毁
- r - 如何找出我的向量中有多少数字小于给定数字