【Kubernetes】Ingress+host暴露服务

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%  

引用

java-developer

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

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

k8s部署有状态应用

入门-部署Spring应用

相关推荐
WilsonPan19 小时前
【Kubernetes】集成Prometheus + Grafana监控
系统运维
WilsonPan9 天前
【Kubernetes】使用Helm简化k8s部署、管理
系统运维
WilsonPan13 天前
【Kubernetes】部署数据库MySQL应用
系统运维
WilsonPan16 天前
【Kubernetes】入门-部署Spring应用
系统运维
谅望者18 天前
Linux文件查看命令完全指南:cat、less、head、tail、grep使用详解
linux·excel·less·shell·文件操作·命令行·系统运维
IT小哥哥呀1 个月前
5 个 Windows 故障排除工具
windows·故障排除·系统运维·windows系统·电脑问题
WilsonPan2 个月前
macOS上优雅运行Docker容器
系统运维
Johny_Zhao3 个月前
达梦数据库高可用集群部署方案
linux·mysql·网络安全·docker·信息安全·kubernetes·云计算·shell·containerd·达梦数据库·yum源·系统运维·centos8
Johny_Zhao3 个月前
Conda、Anaconda、Miniconda对比分析
linux·网络安全·信息安全·kubernetes·云计算·conda·shell·containerd·anaconda·yum源·系统运维·miniconda