Nginx 400在数字海洋Kubernetes环境中的错误请求

xu3bshqb  于 2023-03-01  发布在  Kubernetes
关注(0)|答案(1)|浏览(307)

配置的域为ticket.devaibhav.live
ping ticket.devaibhav.live指向Digital Ocean配置的负载平衡器的正确IP地址。我尚未在群集上配置SSL,但如果我尝试访问我的网站,http://ticket.devaibhav.live会发出400错误请求。我不熟悉kubernetes和群集内网络。
据我所知,当浏览器向http://ticket.devaibhav.live发送请求时,该请求将被发送到数字海洋负载平衡器,然后入口服务(在我的情况下是kubernetes的Ingress-nginx)根据我定义的规则路由流量。
入口-nginx服务

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/do-loadbalancer-enable-proxy-protocol: 'true'
    service.beta.kubernetes.io/do-loadbalancer-hostname: 'ticket.devaibhav.live'
  labels:
    helm.sh/chart: ingress-nginx-2.0.3
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/version: 0.32.0
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: controller
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  type: LoadBalancer
  externalTrafficPolicy: Local
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: http
    - name: https
      port: 443
      protocol: TCP
      targetPort: https
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/component: controller

入口资源规则

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: 'true'
spec:
  rules:
    - host: ticket.devaibhav.live
      http:
        paths:
          - path: /api/users/?(.*)
            pathType: Prefix
            backend:
              service:
                name: auth-srv
                port:
                  number: 3000
          - path: /api/tickets/?(.*)
            pathType: Prefix
            backend:
              service:
                name: tickets-srv
                port:
                  number: 3000
          - path: /api/orders/?(.*)
            pathType: Prefix
            backend:
              service:
                name: orders-srv
                port:
                  number: 3000
          - path: /api/payments/?(.*)
            pathType: Prefix
            backend:
              service:
                name: payments-srv
                port:
                  number: 3000
          - path: /?(.*)
            pathType: Prefix
            backend:
              service:
                name: client-srv
                port:
                  number: 3000

本质上,当我点击http://ticket.devaibhav.live时,请求应该Map到最后一个规则,在那里它必须被路由到client-srv。
客户端部署和服务

apiVersion: apps/v1
kind: Deployment
metadata:
  name: client-depl
spec:
  replicas: 1
  selector:
    matchLabels:
      app: client
  template:
    metadata:
      labels:
        app: client
    spec:
      containers:
        - name: client
          image: vaibhav908/client

---
apiVersion: v1
kind: Service
metadata:
  name: client-srv
spec:
  selector:
    app: client
  ports:
    - name: client
      protocol: TCP
      port: 3000
      targetPort: 3000

以上配置在我使用minikube的开发服务器上运行良好。我不明白配置哪里出错了。我会在必要时提供更多细节。
[edit]在部署kubectl get services的集群上

NAME                   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
client-srv             ClusterIP   10.245.100.25    <none>        3000/TCP            2d17h
and some other services

kubectl describe ingress

Name:             ingress-service
Labels:           <none>
Namespace:        default
Address:          ticket.devaibhav.live
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
  Host                   Path  Backends
  ----                   ----  --------
  ticket.devaibhav.live  
                         /api/users/?(.*)      auth-srv:3000 (10.244.1.76:3000)
                         /api/tickets/?(.*)    tickets-srv:3000 (10.244.0.145:3000)
                         /api/orders/?(.*)     orders-srv:3000 (10.244.1.121:3000)
                         /api/payments/?(.*)   payments-srv:3000 (10.244.1.48:3000)
                         /?(.*)                client-srv:3000 (10.244.1.32:3000)
Annotations:             kubernetes.io/ingress.class: nginx
                         nginx.ingress.kubernetes.io/use-regex: true
Events:                  <none>
qoefvg9y

qoefvg9y1#

确保您的入口控制器配置为遵守LB中的代理协议设置。尝试向配置Map中添加代理协议指令。
如文件所示:
启用或禁用PROXY协议以接收通过代理服务器和负载平衡器(如HAProxy和Amazon弹性负载平衡器(ELB))传递的客户端连接(真实的IP地址)信息。

相关问题