如何为prometheus-rancher-monitoring-prometheus配置HostPort实现外部节点访问
集群外访问Rancher监控Prometheus的可行方案
1. NodePort Service(推荐,稳定不易被覆盖)
直接修改StatefulSet的hostPort大概率会被Rancher监控Operator还原,最稳妥的方式是创建NodePort Service暴露端口:
- 编写配置文件
prometheus-nodeport.yaml:
apiVersion: v1 kind: Service metadata: name: prometheus-rancher-monitoring-nodeport namespace: cattle-monitoring-system spec: type: NodePort selector: app.kubernetes.io/name: prometheus app.kubernetes.io/instance: rancher-monitoring app.kubernetes.io/component: prometheus ports: - port: 9090 targetPort: 9090 nodePort: 30090 # 可选,指定30000-32767范围内的端口,不填会自动分配
- 执行部署命令:
kubectl apply -f prometheus-nodeport.yaml - 集群外访问:
http://<集群任意节点IP>:<分配的nodePort>
2. Ingress(适合已有Ingress Controller的场景)
如果集群已部署Ingress Controller(比如Nginx Ingress),可以通过域名访问:
- 编写Ingress配置文件
prometheus-ingress.yaml:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: prometheus-rancher-monitoring-ingress namespace: cattle-monitoring-system annotations: nginx.ingress.kubernetes.io/ssl-redirect: "false" # 按需开启HTTPS spec: rules: - host: prometheus.your-domain.com # 替换成你的自定义域名 http: paths: - path: / pathType: Prefix backend: service: name: prometheus-rancher-monitoring-prometheus # 监控默认Service名称 port: number: 9090
- 部署命令:
kubectl apply -f prometheus-ingress.yaml - 访问:将域名解析到Ingress节点IP,然后通过
http://prometheus.your-domain.com访问
3. 修复hostPort不生效问题(不推荐,易被覆盖)
如果坚持使用hostPort,需要解决Operator覆盖和端口冲突问题:
- 不要手动修改StatefulSet,直接在Rancher UI中修改监控的Helm配置:
- 进入集群 →
应用市场→已安装的应用,找到rancher-monitoring - 点击
编辑配置,找到prometheus.prometheusSpec.hostPort,设置为9090 - 保存后Operator会自动更新StatefulSet
- 进入集群 →
- 检查节点端口:执行
ss -tulpn | grep 9090,确认9090未被其他进程占用,否则更换端口 - 检查节点防火墙:放行9090端口,确保集群外能访问
- 检查网络策略:执行
kubectl get networkpolicy -n cattle-monitoring-system,如果有策略阻止外部访问,需调整规则
4. LoadBalancer Service(云环境专属)
如果是云厂商托管的K8S集群,直接创建LoadBalancer Service获取外部IP:
apiVersion: v1 kind: Service metadata: name: prometheus-rancher-monitoring-loadbalancer namespace: cattle-monitoring-system spec: type: LoadBalancer selector: app.kubernetes.io/name: prometheus app.kubernetes.io/instance: rancher-monitoring app.kubernetes.io/component: prometheus ports: - port: 9090 targetPort: 9090
- 部署后云厂商会分配外部IP,直接通过
http://<外部IP>:9090访问
内容的提问来源于stack exchange,提问作者ramesh k
相关产品推荐
相关产品推荐

