部署问题:port-forward和targetPort无法暴露内部服务
解决方法:通过Service指定nodePort的形式
# prometheus-service.yaml
---
apiVersion: v1
kind: Service
metadata:
labels:
app: prometheus
name: prometheus
namespace: kube-ops
spec:
type: NodePort
ports:
- name: web
port: 9090
nodePort: 30000
selector:
app: prometheus
注意:
1、如果在Service中没有指定type类型,将默认采用ClusterIP类型,报错如下:
# prometheus-service.yaml
---
apiVersion: v1
kind: Service
metadata:
labels:
app: prometheus
name: prometheus
namespace: kube-ops
spec:
#不指定type类型,将默认type:ClusterIP
#type: NodePort
ports:
- name: web
port: 9090
nodePort: 30000
selector:
app: prometheus
$ kubectl create -f prometheus-service.yaml
The Service "promethues" is invalid: spec.ports[0].nodePort: Forbidden: may not be used when `type` is 'ClusterIP'
2、如果在Service中所指定的nodePort不在规定范围30000-32767,也会报错:
# prometheus-service.yaml
---
apiVersion: v1
kind: Service
metadata:
labels:
app: prometheus
name: prometheus
namespace: kube-ops
spec:
type: NodePort
ports:
- name: web
port: 9090
#使用nodePort时,端口号必须在30000-32767有效范围内
#nodePort: 30000
nodePort:3000
selector:
app: prometheus
$ kubectl create -f prometheus-service.yaml
The Service "promethues" is invalid: spec.ports[0].nodePort: Invalid value: 3000: provided port is not in the valid range. The range of valid ports is 30000-32767