1

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

问题是当我将 ClusterIP 服务更改为 LoadBalancer 以直接对其进行测试时,我从 WebApi 获得结果。但是当我将它改回 ClusterIP 并使用 Nginx 入口控制器 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: /$1
    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

4

1 回答 1

0

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

是重写解释。

这是示例:

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: /$2
    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: /$2。$1 引用第一组: / or end of string,第二组是它之后的所有内容;因此,您复制之后的所有内容/demo/并使其成为新路径。

于 2021-04-26T08:38:53.197 回答