问题描述
我创建了一个示例 .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
解决方法
看起来你搞砸了你的入口对象。我假设您想将 /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: /$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/
之后的所有内容并将其设为新路径。