使用 Nginx 入口控制器将 .Net Core WebApi Docker 图像部署到 Azure Kubernetes 服务

Deploying .Net Core WebApi Docker Image to Azure Kubernetes Service using Nginx Ingress Controller

我创建了一个示例 .Net Core WebApi 并将图像推送到 ACR。现在,我使用指向已部署 Pods 运行 图像的 ClusterIP 服务的入口资源,使用 Nginx 入口控制器将其部署到 AKS。

问题是当我将 ClusterIP 服务更改为 LoadBalancer 以直接命中它进行测试时,我从 WebApi 获得结果。但是当我将它改回 ClusterIP 并使用 Nginx Ingress Controller IP 地址时,我总是得到 404 Not Found。

下面是代码。请提出建议。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: weather-forecast-webapi-deployment
  namespace: development
spec:
  replicas: 1
  selector:
    matchLabels:
      app: weather-forecast-webapi-pod
  template:
    metadata:
      labels:
        app: weather-forecast-webapi-pod
    spec:
      containers:
        - name: weather-forecast-webapi-container
          image: employeeconnectacr.azurecr.io/demoapi:latest
          ports:
            - containerPort: 80


apiVersion: v1
kind: Service
metadata:
  name: weather-forecast-webapi-service-clusterip
  namespace: development
spec:
  ports:
    - port: 80
      targetPort: 80
  selector:
    app: weather-forecast-webapi-pod


kind: Ingress
apiVersion: networking.k8s.io/v1beta1
metadata:
  name: econnect-ingress
  namespace: development
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/ssl-redirect: 'false'
    nginx.ingress.kubernetes.io/use-regex: 'true'
spec:
  rules:
    - http:
        paths:
          - path: /demo
            pathType: Prefix
            backend:
              serviceName: weather-forecast-webapi-service-clusterip
              servicePort: 80
status:
  loadBalancer:
    ingress:
      - ip: 52.141.219.175

看起来你搞砸了你的入口对象。我假设您想将 /demo 路径重写为 /,以便将 /demo/foo/bar 之类的路径重写为 /foo/bar.

Here 是重写解释。

示例如下:

kind: Ingress
apiVersion: networking.k8s.io/v1beta1
metadata:
  name: econnect-ingress
  namespace: development
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/ssl-redirect: 'false'
spec:
  rules:
    - http:
        paths:
          - path: /demo(/|$)(.*)
            pathType: Prefix
            backend:
              serviceName: weather-forecast-webapi-service-clusterip
              servicePort: 80

请注意,我只更改了路径和 rewtire-tager 组号。在 /demo(/|$)(.*) 中,括号 () 创建一个在 rewrite-target: / 中引用的组。 $1 引用第一组:/ or end of string,第二组是它后面的所有内容;所以你复制 /demo/ 之后的所有内容并使其成为新路径。