Kubernetes使用ingress+host暴露服务
在Kubernetes中使用Ingress结合本地hosts文件暴露服务是一种常见的本地开发和测试方案。以下是详细的配置步骤:
1. 部署Ingress Controller
# 使用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,所以需要外部服务的形式,提供。
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配置:
kubectl apply -f ingress.yaml
4. 获取Ingress Controller的IP地址
kubectl get services ingress-nginx-controller -n ingress-nginx
这里看到外部IP是192.168.64.3
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文件
192.168.64.3 spring.wilson.local 192.168.64.3 grafana.wilson.local 192.168.64.3 prometheus.wilson.local
6. 验证配置
kubectl get ingress
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