You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 6 Web API+AKS+应用网关联动故障求助

AKS中ASP.NET Core API无法通过应用网关Ingress暴露的问题

问题背景

  • 所有容器本地测试正常
  • CI/CD流程配置正确
  • 核心服务:Angular 13前端(已通过应用网关Ingress+TLS正常访问)、ASP.NET Core 6 Web API
  • API Pod运行正常,改为LoadBalancer类型+静态IP可外部访问,但通过应用网关Ingress无法访问
  • kubectl logs未发现Pod报错,怀疑Ingress配置存在问题

相关配置

1. Ingress配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: api-ingress
  namespace: test
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
spec:
  rules:
  - host: "testapi.url.ca"
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: api-svc
            port:
              number: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress
  namespace: test
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  tls:
    - secretName: url-tls
      hosts:
        - test.url.ca
        - test.url.com
  rules:
  - host: "test.url.ca"
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: web-svc
            port:
              number: 80

2. API服务配置

apiVersion: v1
kind: Service
metadata:
  name: api-svc
  namespace: test
spec:
  selector:
    app: api
  ports:
  - name: regular
    port: 80
    targetPort: 80
    protocol: TCP

3. Docker镜像构建文件

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80/tcp
EXPOSE 443/tcp

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src

COPY ./Lib/Contract ./Lib/Contract
COPY ./Lib/Framework ./Lib/Framework
COPY ./Output/Api ./Output/Api

WORKDIR /src/Output/Api
RUN dotnet restore Api.csproj --disable-parallel
RUN dotnet build Api.csproj --no-restore -c Release

FROM build AS publish
RUN dotnet publish Api.csproj --no-restore --no-build -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app/SensitiveData/localhost1.pfx /https/localhost1.pfx
COPY --from=publish /app .

RUN ls -l /app

ENTRYPOINT ["dotnet", "Api.dll"]

排查与解决方案

1. 验证Ingress与应用网关同步状态

执行kubectl get ingress api-ingress -n test查看Ingress状态,确认ADDRESS字段是否填充应用网关的IP/域名。若未填充,检查:

  • 应用网关Ingress Controller是否正确部署到AKS集群
  • 集群与应用网关的Managed Identity权限配置是否正常

2. 测试集群内部API服务连通性

在集群内启动临时容器测试API服务可达性:

kubectl run -it --rm --image=curlimages/curl test-curl -n test
# 进入容器后执行
curl http://api-svc/[你的API测试路径]

若能正常返回数据,说明服务本身无问题,问题出在Ingress转发环节。

3. 调整Ingress配置的潜在问题

(1)补充API的TLS配置

前端Ingress已配置TLS,API的Ingress缺失可能导致应用网关路由规则冲突。若testapi.url.ca的证书已在url-tls Secret中,为API的Ingress添加TLS配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: api-ingress
  namespace: test
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  tls:
    - secretName: url-tls
      hosts:
        - testapi.url.ca
  rules:
  - host: "testapi.url.ca"
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: api-svc
            port:
              number: 80

(2)匹配API路由前缀

若ASP.NET Core API的路由前缀为/api,调整Ingress的路径配置:

paths:
- pathType: ImplementationSpecific
  path: /api/*
  backend:
    service:
      name: api-svc
      port:
        number: 80

(3)配置健康探针

应用网关依赖健康探针判断后端服务状态,若API根路径/未返回200状态码,添加健康检查配置:

metadata:
  annotations:
    appgw.ingress.kubernetes.io/probe-path: "/health"
    appgw.ingress.kubernetes.io/probe-protocol: "Http"
    appgw.ingress.kubernetes.io/probe-port: "80"

同时确保API项目中已实现/health健康检查接口。

4. 查看应用网关日志

检查应用网关的访问日志和诊断日志,确认请求是否到达网关、是否存在转发错误(如404、502状态码),定位具体转发问题。


内容的提问来源于stack exchange,提问作者Mehdi Benadada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 08:01:02