Load Watcher默认端口2020无法使用,部署NodePort服务求助
一、先解决Metrics Server连接报错
你的核心问题是Load Watcher Pod无法访问kube-apiserver(10.96.0.1是kube-apiserver的ClusterIP),导致无法拉取Metrics Server数据,按以下步骤排查:
检查Metrics Server运行状态
执行命令查看kube-system下的Metrics Server Pod是否正常运行:kubectl get pods -n kube-system | grep metrics-server如果Pod状态异常,查看日志排查启动问题:
kubectl logs -n kube-system <metrics-server-pod-name>大部分情况下,Metrics Server需要添加
--kubelet-insecure-tls参数跳过kubelet的证书验证,修改其Deployment即可:kubectl edit deployment metrics-server -n kube-system在
spec.template.spec.containers[0].args里添加--kubelet-insecure-tls,保存后等待Pod重启。验证Metrics Server API可访问性
在集群内任意运行的Pod中(比如用busybox临时Pod)测试API:kubectl run -it --rm busybox --image=busybox:1.36 -- curl -k https://kubernetes.default.svc.cluster.local/apis/metrics.k8s.io/v1beta1/nodes如果能返回节点metrics数据,说明Metrics Server正常;如果不能,检查kube-apiserver是否开启了metrics API聚合层(大部分集群默认开启,若未开启需配置kube-apiserver的
--enable-aggregator-routing=true参数)。检查Load Watcher的配置
确保Load Watcher使用集群内可靠的Service DNS地址访问Metrics Server,而不是硬编码的10.96.0.1。修改Load Watcher的Deployment,添加环境变量指定Metrics Server地址:env: - name: METRICS_SERVER_URL value: "https://kubernetes.default.svc.cluster.local/apis/metrics.k8s.io/v1beta1"同时确认Load Watcher Pod所在Namespace没有NetworkPolicy限制访问kube-apiserver。
二、正确部署NodePort Service到2020端口
按以下步骤配置Service,确保能通过2020端口访问Load Watcher:
确认Load Watcher容器暴露的端口
查看你的Load Watcher Deployment,确认容器内监听的端口(官方默认是8080),比如Deployment中的ports.containerPort字段。编写NodePort Service YAML文件(命名为
load-watcher-svc.yaml):
apiVersion: v1 kind: Service metadata: name: load-watcher-nodeport spec: type: NodePort selector: app: load-watcher # 必须和Load Watcher Deployment的labels完全匹配 ports: - port: 8080 # Service的ClusterIP端口(可自定义) targetPort: 8080 # 对应容器内监听的端口 nodePort: 2020 # 指定的NodePort,需确保该端口未被集群内其他Service占用
- 部署Service并验证
执行命令部署:
查看Service状态:kubectl apply -f load-watcher-svc.yaml
确认kubectl get svc load-watcher-nodeportNODEPORT列显示2020,之后用集群任意节点的IP访问:
注意接口路径需和Load Watcher的实际暴露路径一致(你提到的curl http://<集群节点IP>:2020/watcherGET/WATCHER可能是大写,需调整为对应路径)。
内容的提问来源于stack exchange,提问作者ghost44

