【Kubernetes】Ingress+host暴露服务

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%  

k8s_ingress_grafana

k8s_ingress_prometheus

引用

java-developer

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

k8s使用Helm简化k8s部署、管理

k8s部署有状态应用

入门-部署Spring应用

posted @ 2025-11-21 18:53  WilsonPan  阅读(20)  评论(0)    收藏  举报