Kubernetes使用ingress+host暴露服务
在Kubernetes中使用Ingress结合本地hosts文件暴露服务是一种常见的本地开发和测试方案。以下是详细的配置步骤:
1. 部署Ingress Controller
sh
# 使用Helm安装
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install ingress-nginx ingress-nginx/ingress-nginx
# 或者使用kubectl安装
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml
2. 准备需要配置的应用
这里就选之前的Spring应用和Prometheus + Grafana应用作为事例
3. 配置Ingress资源
创建Ingress规则,这里需要注意一下grafana-proxy和prometheus-proxy,因为他们不是相同namespace,所以需要外部服务的形式,提供。
yaml
apiVersion: v1
kind: Service
metadata:
name: grafana-proxy # 简单的名称,符合 DNS-1035
namespace: default # 与 Ingress 相同的 namespace
spec:
type: ExternalName
externalName: prometheus-grafana.monitoring.svc.cluster.local
ports:
- port: 80
targetPort: 80
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: prometheus-proxy # 简单的名称,符合 DNS-1035
namespace: default # 与 Ingress 相同的 namespace
spec:
type: ExternalName
externalName: prometheus-kube-prometheus-prometheus.monitoring.svc.cluster.local
ports:
- port: 80
targetPort: 9090
protocol: TCP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sprint-service-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
spec:
ingressClassName: nginx
rules:
- host: spring.wilson.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: sprint-service
port:
number: 8080
- host: grafana.wilson.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: grafana-proxy
port:
number: 80
- host: prometheus.wilson.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: prometheus-proxy
port:
number: 80
应用Ingress配置:
sh
kubectl apply -f ingress.yaml
4. 获取Ingress Controller的IP地址
sh
kubectl get services ingress-nginx-controller -n ingress-nginx
这里看到外部IP是192.168.64.3
text
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.43.66.139 192.168.64.3 80:32325/TCP,443:31156/TCP 3h39m
5. 配置本地hosts文件
text
192.168.64.3 spring.wilson.local
192.168.64.3 grafana.wilson.local
192.168.64.3 prometheus.wilson.local
6. 验证配置
sh
kubectl get ingress
text
curl http://spring.wilson.local
Hello from Spring Boot on Kubernetes! first time: 2025-11-21 07:29:34%


引用
例子: https://github.com/WilsonPan/java-developer/k8s/monitoring