我有一个 dns 映射到我的 aks 负载均衡器的外部 IP,在负载均衡器下方有一个 nginx 入口控制器,它与我的集群中的服务的入口进行通信。
当我尝试访问我的 dns 时,例如:mydns/post/test,我收到 nginx 404 错误。看起来 nginx 回答正确,但没有找到内部路由映射。
下面我重写了这个实现的所有步骤。
通过此命令安装nginx:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml
使用命令:
kubectl 获取所有 -n ingress-nginx
我用这个yaml创建由nginx控制的入口:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: service-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: post-service
port:
number: 8080
还有售后服务:
apiVersion: v1
kind: Service
metadata:
name: post-service
spec:
selector:
app.kubernetes.io/name: post
ports:
- port: 8080
targetPort: 8080
The service communicate with a pod that containt a test endpoint(spring boot app, works
通过转发端口正确测试):
@RestController
@Slf4j
public class PostController {
@GetMapping("/test")
String all() {
return "Hello!";
}
}
为什么我收到 nginx 404 错误?
谢谢
请使用
kubectl logs -n ingress-nginx <your-ingress-controller-pod-name>
检查您的 Pod 日志,以深入了解路由或连接到 Spring Boot 应用程序的任何问题。
我可以看到,在您的 Ingress YAML 中,您已将路径定义为
/
和 pathType: Prefix
。这意味着 Ingress 会将具有指定前缀的流量路由到指定的后端服务。
但是,当您尝试访问 URL
mydns/post/test
时,它与 Ingress 中指定的路径 (/
) 不匹配。相反,您正在尝试到达 /test
上的 post-service
路径。
尝试如下修改您的入口 YAML
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: service-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- http:
paths:
- path: /post/test
pathType: Prefix
backend:
service:
name: post-service
port:
number: 8080
使用重新涂抹。
kubectl apply -f service-ingress.yaml
对“/post/test”的请求将被正确路由到您的服务。
参考文档: