当前位置: 首页 > 知识库问答 >
问题:

ALB入口控制器重定向到正确路径时出现问题

鲁英卫
2023-03-14

我已经使用Ingress Controller(版本)完成了ALB(应用程序负载平衡器)的设置-

我可以使用负载均衡器链接访问我的服务:-

http://5e07dbe1-default-nginxingr-29e9-1260427999.us-east-1.elb.amazonaws.com/

我在Ingress中配置了两种不同的服务,如下所示:-

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: "nginx-ingress"
  namespace: "default"
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/security-groups: sg-014b302d73097d083
    # alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}'
    # alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-east-1:195725532069:certificate/b6a9e691-b807-4f10-a0bf-0449730ecdf4
    # alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
    # alb.ingress.kubernetes.io/backend-protocol: HTTPS
    #alb.ingress.kubernetes.io/load-balancer-attributes: "60"
    #alb.ingress.kubernetes.io/rewrite-target: /
  labels:
    app: nginx-ingress
spec:
  rules:
  - http:
      paths:
      # - path: /*
      #   pathType: Prefix
      #   backend:
      #     service:
      #        name: ssl-redirect
      #        port: 
      #          number: use-annotation
      - path: /foo
        pathType: Prefix
        backend:
          service:
            name: "nginx-service"
            port:
              number: 80
      - path: /*
        pathType: Prefix
        backend:
          service:
             name: "mydocker-svc"
             port: 
               number: 8080

现在的问题是,如果我将/foo放在LB链接的末尾,那么什么都不会发生,我得到404未找到错误:-

我的两个服务都很好,各自的pod运行在各自的Kubernetes节点端口服务后面,但它们无法使用入口访问。如果我用另一个服务(nginx服务)交换到/*from/foo的路径,那么我就可以访问它,但它会破坏我以前的服务(mydocker svc)。

请让我知道我错在哪里,以便我可以修复此问题。非常感谢。

ALB控制器:-

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app.kubernetes.io/name: alb-ingress-controller
  name: alb-ingress-controller
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: alb-ingress-controller
  template:
    metadata:
      labels:
        app.kubernetes.io/name: alb-ingress-controller
    spec:
      containers:
      - name: alb-ingress-controller
        args:
        - --ingress-class=alb
        - --cluster-name=eks-fargate-alb-demo
        - --aws-vpc-id=vpc-0dc46d370e38de475
        - --aws-region=us-east-1
        image: docker.io/amazon/aws-alb-ingress-controller:v1.1.8
      serviceAccountName: alb-ingress-controller

Nginx服务:-

apiVersion: v1
kind: Service
metadata:
  annotations:
    alb.ingress.kubernetes.io/target-type: ip
  name: "nginx-service"
  namespace: "default"
spec:
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
  type: NodePort
  selector:
    app: "nginx"

mydocker svc:-

apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    eks.amazonaws.com/fargate-profile: fp-default
    run: mydocker
  name: mydocker-svc
  annotations:
    alb.ingress.kubernetes.io/target-type: ip
spec:
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    eks.amazonaws.com/fargate-profile: fp-default
    run: mydocker
  type: NodePort
status:
  loadBalancer: {}

共有1个答案

虞修平
2023-03-14

你可以试试这个,我用它作为参考

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-usermgmt-restapp-service
  labels:
    app: usermgmt-restapp
  annotations:
    # Ingress Core Settings
    kubernetes.io/ingress.class: "alb"
    alb.ingress.kubernetes.io/scheme: internet-facing
    # Health Check Settings
    alb.ingress.kubernetes.io/healthcheck-protocol: HTTP 
    alb.ingress.kubernetes.io/healthcheck-port: traffic-port
#Important Note:  Need to add health check path annotations in service level if we are planning to use multiple targets in a load balancer    
    #alb.ingress.kubernetes.io/healthcheck-path: /usermgmt/health-status
    alb.ingress.kubernetes.io/healthcheck-interval-seconds: '15'
    alb.ingress.kubernetes.io/healthcheck-timeout-seconds: '5'
    alb.ingress.kubernetes.io/success-codes: '200'
    alb.ingress.kubernetes.io/healthy-threshold-count: '2'
    alb.ingress.kubernetes.io/unhealthy-threshold-count: '2'
spec:
  rules:
    - http:
        paths:
          - path: /app1/*
            backend:
              serviceName: app1-nginx-nodeport-service
              servicePort: 80                        
          - path: /app2/*
            backend:
              serviceName: app2-nginx-nodeport-service
              servicePort: 80            
          - path: /*
            backend:
              serviceName: usermgmt-restapp-nodeport-service
              servicePort: 8095

阅读更多信息:https://www.stacksimplify.com/aws-eks/aws-alb-ingress/kubernetes-aws-alb-ingress-context-path-based-routing/

 类似资料:
  • 我们在EKS集群中部署了一个现有的ALB入口控制器,映像为v1.1.9: docker.io/amazon/aws-alb-ingress-controller: v1.1.9 现在我们正在从AWS ALB入口控制器(v1)迁移到新的AWS负载均衡器控制器(v2)。 以下文件:https://kubernetes-sigs.github.io/aws-load-balancer-controlle

  • 我在重定向到访问令牌入口点/oauth/token时遇到问题,这将在下面详述。我希望有人能给我一些光,因为我花了很多时间来实现这一点。 另外,有趣的是,即使按照他们的说明,我也无法使用SoapUI 5.0社区版进行测试。它设置了授权代码,但稍后会失败,因为您需要将重定向URI设置为“urn:ietf:wg:oauth:2.0:oob”。 因为Spring-Security-Oauth2缺少很多好的

  • 我已经安装并配置了AWS ALB入口控制器(https://github.com/kubernetes-sigs/aws-alb-ingress-controller),它可以通过HTTP正常工作。但是,它不能通过HTTPS解析。 入口资源如下: 我还按照此处的说明添加了自签名SSL证书: https://kubernetes.github.io/ingress-nginx/user-guide/

  • 问题内容: TextPanel.java FormPanel.java JumpHosts.java 因此,每当我单击任何按钮时,输出都将被重定向到仅一个文本区域,而其他似乎无法使用。即到最后创建的标签。我希望当我单击按钮1时,它应该写入选项卡1,而当我单击按钮2时,它应该写入选项卡2,依此类推。 我不熟悉Java的例子 问题答案: 在JumpHosts中: 您创建一个实例,该实例在程序中没有其他

  • 我意识到以前有人问过我这个问题,请容忍我,因为我还在学习这个问题。我想我已经尝试了所有的解决方案,但是没有运气。 问题是:当重定向到时,它没有呈现预期的组件() 我已经实现了一个,如下所示; privaterout.js 这就是我使用它的地方; index.js 在这个问题中要补充几点: 我确认重定向确实发生在(我通过将

  • 我有一个有一些订单的客户列表,我把他们都显示在一个表中。我添加了一个按钮,以便删除每个订单,如果需要的话。 当我试图删除一个特定的订单时,我会得到以下错误 未能将类型“java.lang.String”的值转换为所需类型“java.lang.Long”;嵌套异常是java.lang.NumberFormatException:对于输入字符串:“{cid}(cid=${customer.id})”