我最近使用 kubeadm 重新安装了 kubernetes 集群,并在尝试一些 helm 图表时遇到了一些我无法理解的奇怪行为。
ClusterIP 服务应该只能从集群访问,到目前为止,所有服务都以这种方式工作。但是尝试kube-prometheus从 bitnami 中,我最终得到了一些 ClusterIP 服务,它们以某种方式劫持了主机 IP 并公开暴露。没想到没有任何 Ingress/NodePort/等就可能实现。
实际的服务如下:
kind: Service
apiVersion: v1
metadata:
name: kube-prometheus-node-exporter
namespace: kube-prometheus
selfLink: /api/v1/namespaces/kube-prometheus/services/kube-prometheus-node-exporter
uid: 0c4cd5a1-4849-4635-a656-238a5c3b4b78
resourceVersion: '20388'
creationTimestamp: '2020-09-08T18:08:17Z'
labels:
app.kubernetes.io/instance: kube-prometheus
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: node-exporter
app.kubernetes.io/version: 1.0.1
helm.sh/chart: node-exporter-1.1.0
jobLabel: node-exporter
annotations:
meta.helm.sh/release-name: kube-prometheus
meta.helm.sh/release-namespace: kube-prometheus
prometheus.io/scrape: 'true'
managedFields:
- manager: Go-http-client
operation: Update
apiVersion: v1
time: '2020-09-08T18:08:17Z'
fieldsType: FieldsV1
fieldsV1:
'f:metadata':
'f:annotations':
.: {}
'f:meta.helm.sh/release-name': {}
'f:meta.helm.sh/release-namespace': {}
'f:prometheus.io/scrape': {}
'f:labels':
.: {}
'f:app.kubernetes.io/instance': {}
'f:app.kubernetes.io/managed-by': {}
'f:app.kubernetes.io/name': {}
'f:app.kubernetes.io/version': {}
'f:helm.sh/chart': {}
'f:jobLabel': {}
'f:spec':
'f:ports':
.: {}
'k:{"port":9100,"protocol":"TCP"}':
.: {}
'f:name': {}
'f:port': {}
'f:protocol': {}
'f:targetPort': {}
'f:selector':
.: {}
'f:app.kubernetes.io/instance': {}
'f:app.kubernetes.io/name': {}
'f:sessionAffinity': {}
'f:type': {}
spec:
ports:
- name: metrics
protocol: TCP
port: 9100
targetPort: metrics
selector:
app.kubernetes.io/instance: kube-prometheus
app.kubernetes.io/name: node-exporter
clusterIP: 10.107.104.65
type: ClusterIP
sessionAffinity: None
status:
loadBalancer: {}
没有什么特别之处可以解释为什么这个文件最终会公开(例如可以使用主机 IP 进行访问:http://xx.yy.150.105:9100/metrics)。
知道我可能错过了什么吗?