AKS集群中Ingress Nginx路由配置问题(Docker投票应用)
问题描述
背景信息
我克隆了https://github.com/dockersamples/example-voting-app.git仓库,导师要求我使用Ingress暴露集群。但当我将通配符兜底路径/指向vote服务时,result服务无法正常工作,反之亦然。我目前使用HTTP访问,因为使用cert-manager和主机名时出现了问题。此外,我使用了新的AKS集群,因为之前在AKS的前端IP/公网IP实验中遇到了问题。
我的YAML文件
apiVersion: apps/v1 kind: Deployment metadata: labels: app: db name: db namespace: vote-app spec: replicas: 1 selector: matchLabels: app: db template: metadata: labels: app: db spec: containers: - image: postgres:15-alpine name: postgres env: - name: POSTGRES_USER value: postgres - name: POSTGRES_PASSWORD value: postgres ports: - containerPort: 5432 name: postgres volumeMounts: - mountPath: /var/lib/postgresql/data name: db-data volumes: - name: db-data emptyDir: {} --- apiVersion: v1 kind: Service metadata: labels: app: db name: db namespace: vote-app spec: type: ClusterIP ports: - name: postgres port: 5432 targetPort: 5432 selector: app: db --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: redis name: redis namespace: vote-app spec: replicas: 1 selector: matchLabels: app: redis template: metadata: labels: app: redis spec: containers: - image: redis:alpine name: redis ports: - containerPort: 6379 name: redis volumeMounts: - mountPath: /data name: redis-data volumes: - name: redis-data emptyDir: {} --- apiVersion: v1 kind: Service metadata: labels: app: redis name: redis namespace: vote-app spec: type: ClusterIP ports: - name: redis port: 6379 targetPort: 6379 selector: app: redis --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: result name: result namespace: vote-app spec: replicas: 1 selector: matchLabels: app: result template: metadata: labels: app: result spec: containers: - image: dockersamples/examplevotingapp_result name: result ports: - containerPort: 80 name: http --- apiVersion: v1 kind: Service metadata: labels: app: result name: result namespace: vote-app spec: type: ClusterIP ports: - name: http port: 80 targetPort: 80 selector: app: result --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: vote name: vote namespace: vote-app spec: replicas: 1 selector: matchLabels: app: vote template: metadata: labels: app: vote spec: containers: - image: dockersamples/examplevotingapp_vote name: vote ports: - containerPort: 80 name: http --- apiVersion: v1 kind: Service metadata: labels: app: vote name: vote namespace: vote-app spec: type: ClusterIP ports: - name: http port: 80 targetPort: 80 selector: app: vote --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: worker name: worker namespace: vote-app spec: replicas: 1 selector: matchLabels: app: worker template: metadata: labels: app: worker spec: containers: - image: dockersamples/examplevotingapp_worker name: worker --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress namespace: vote-app annotations: nginx.ingress.kubernetes.io/rewrite-target: / nginx.ingress.kubernetes.io/ssl-redirect: "false" nginx.ingress.kubernetes.io/use-regex: "true" spec: ingressClassName: nginx rules: - http: paths: - path: /vote pathType: Prefix backend: service: name: vote port: number: 80 - path: /result pathType: Prefix backend: service: name: result port: number: 80 - path: / pathType: Prefix backend: service: name: vote port: number: 80
无效的解决方案
- 尝试添加Let's Encrypt cert-manager和主机名,但使用HTTPS时出现错误:
https://my-voting-app.com/' was loaded over HTTPS, but requested an insecure script 'http://code.jquery.com/jquery-latest.min.js'. This request has been blocked; the content must be served over HTTPS.,因此暂时放弃该方案。 - 尝试将rewrite-target调整为/$1和/$2,但CSS和JavaScript文件无法加载。此外,完全移除注解也无法解决问题。
- 尝试将pathType改为ImplementationSpecific,但无效。
- 尝试创建另一个Ingress文件:版本A用于提供静态文件,无效;版本B将
result和vote路径分开,无效,随后将/路径拆分到另一个Ingress文件中,仍然无效。
最后,我将result和vote服务改为LoadBalancer类型,虽然可以正常工作,但导师对此不满意。
内容的提问来源于stack exchange,提问作者Jed N. Victoria
相关产品推荐
相关产品推荐

