什么是 Kubernetes 的 Ingress,如何配置 .NET 服务?

来源:这里教程网 时间:2026-02-21 17:27:35 作者:

Kubernetes 的 Ingress 是一种 API 资源,用于管理对集群内服务的外部访问,通常通过 HTTP/HTTPS 提供基于域名和路径的路由。它充当第7层(应用层)负载均衡器,可以将外部请求转发到不同的后端服务,比如你的 .NET Web API 或前端应用。

为什么使用 Ingress?

Ingress 能够:

暴露多个服务通过一个统一的公网 IP 支持基于域名(如 api.example.com、app.example.com)的路由 配置 TLS 加密(HTTPS) 实现路径重写、流量控制等高级功能

注意:Ingress 只是定义规则,需要配合 Ingress Controller(如 Nginx、Traefik、Istio)才能真正生效。

部署 .NET 服务并配置 Ingress

以 ASP.NET Core 应用为例,展示从部署到接入 Ingress 的完整流程。

1. 编写 .NET 服务的 Deployment 和 Service

先确保你的 .NET 服务已容器化,并创建对应的 Deployment 和 ClusterIP 类型的服务。

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dotnet-api
spec:
  replicas: 2
  selector:
    matchLabels:
      app: dotnet-api
  template:
    metadata:
      labels:
        app: dotnet-api
    spec:
      containers:
      - name: dotnet-api
        image: your-registry/dotnet-api:latest
        ports:
        - containerPort: 80
---
# service.yaml
apiVersion: v1
kind: Service
metadata:
  name: dotnet-api-service
spec:
  selector:
    app: dotnet-api
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: ClusterIP

应用配置:

kubectl apply -f deployment.yaml -f service.yaml

2. 部署 Ingress Controller(以 Nginx 为例)

如果没有安装 Ingress Controller,需先部署。常用的是 Kubernetes 社区版 Nginx Ingress:

helm install nginx-ingress ingress-nginx/ingress-nginx

安装后会创建一个 LoadBalancer 类型的服务,对外暴露 80/443 端口。

3. 创建 Ingress 规则

编写 Ingress 资源,将外部请求路由到 .NET 服务。

# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: dotnet-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  ingressClassName: nginx  # 对应 Ingress Controller 的 class
  tls:
  - hosts:
    - api.example.com
    secretName: example-tls-secret  # 提前创建 TLS 证书 Secret
  rules:
  - host: api.example.com
    http:
      paths:
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: dotnet-api-service
            port:
              number: 80

说明:

host:指定访问域名 path:匹配路径前缀,如 /api 转发到后端服务 rewrite-target:确保路径正确转发(避免 404) TLS:启用 HTTPS,需提前用 kubectl 创建 tls secret

创建 TLS Secret 示例:

kubectl create secret tls example-tls-secret --cert=tls.crt --key=tls.key

应用 Ingress:

kubectl apply -f ingress.yaml

4. 验证访问

确保你的 DNS 将 api.example.com 指向 Ingress Controller 的公网 IP。

访问测试:

https://api.example.com/api/weatherforecast

如果一切正常,请求会经过 Ingress 被转发到 .NET 服务。

常见问题与建议

确认 Ingress Controller 已运行且有外部 IP 检查服务名称和端口是否与 Ingress 中一致 路径类型 pathType 使用 Prefix 或 Exact,注意语义差异 .NET 服务内部不要依赖特定路径前缀,路径重写由 Ingress 处理 开启日志或使用 kubectl describe ingress dotnet-ingress 排错

基本上就这些。只要 Deployment、Service、Ingress 三层配置正确,.NET 服务就能通过域名安全对外提供服务。

相关推荐