Kubernetes ALB 入口 : How to expose multiple ports on ingress resource

标签 kubernetes kubernetes-ingress aws-alb

我正在尝试为这个看起来很常见的问题找到解决方案。

  • 我有一个 k8s 集群 ip 服务,它暴露了两个端口:8088 和 60004
  • 我想在 ALB 上公开这些相同的端口,而不使用基于路径的路由

  • 这适用于在 8088 端口上公开一项服务:
    ---
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: myingress
      namespace: myns
      annotations:
        kubernetes.io/ingress.class: alb
        alb.ingress.kubernetes.io/healthcheck-path: /ping
        alb.ingress.kubernetes.io/scheme: internet-facing
        alb.ingress.kubernetes.io/tags: Environment=dev,Team=test
        alb.ingress.kubernetes.io/target-type: ip
        alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 8088}]'
    spec:
      rules:
        - host: myhost
          http:
            paths:
              - path: /*
                backend:
                  serviceName: firstservice
                  servicePort: 8088
    

    如何使用 ONE Ingress 为两种服务实现相同的目标?

    提前致谢。

    最佳答案

    最后,为了解决这个问题,我使用了 ALB 入口 Controller 组功能,该功能目前处于 alpha 状态:https://github.com/kubernetes-sigs/aws-alb-ingress-controller/issues/914

    这是我的入口资源现在的样子:

    ---
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: myingress_1
      namespace: myns
      annotations:
        kubernetes.io/ingress.class: alb
        alb.ingress.kubernetes.io/scheme: internet-facing
        alb.ingress.kubernetes.io/tags: Environment=dev,Team=test
        alb.ingress.kubernetes.io/target-type: ip
        alb.ingress.kubernetes.io/group.name: mygroup
        alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 8088}]'
    spec:
      rules:
        - host: <HOST>
          http:
            paths:
              - path: /*
                backend:
                  serviceName: myservice
                  servicePort: 8088
    ---
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: myingress_2
      namespace: myns
      annotations:
        kubernetes.io/ingress.class: alb
        alb.ingress.kubernetes.io/scheme: internet-facing
        alb.ingress.kubernetes.io/tags: Environment=dev,Team=test
        alb.ingress.kubernetes.io/target-type: ip
        alb.ingress.kubernetes.io/group.name: mygroup
        alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 60004}]'
    spec:
      rules:
        - host: <HOST>
          http:
            paths:
              - path: /*
                backend:
                  serviceName: myservice
                  servicePort: 60004
    

    关键在哪里
    alb.ingress.kubernetes.io/group.name: mygroup
    

    连接这两个入口资源。

    因此,我最终得到以下结果:
  • 在 k8s 中具有多个(两个)端口的服务暴露在两个单独的入口
    资源,但它们都指向同一个 AWS ALB(因为同一个组
    姓名)
  • 在 AWS ALB 方面,我得到一个 ALB,其中公开了两个端口:8088 和
    60004 并且每个都指向相同的 k8s 服务,但是
    同一个 pod 上的不同端口(这很容易是两个不同的 k8s 服务
    如果需要)
  • 关于Kubernetes ALB 入口 : How to expose multiple ports on ingress resource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58065884/

    相关文章:

    kubernetes - Istio envoy 504 网关在出站连接 15 秒后超时

    ssl - curl: (7) 无法连接到 xx.xx.xx.xx:80;连接被拒绝

    c# - ASP.Net Core 2.2 Kubernetes 入口 : not found static content for custom path

    amazon-web-services - Ingress 不更新 ALB

    ubuntu - Kubernetes上的helm安装过程

    kubernetes - 如何通过fluentd将json日志发送到stackdriver

    kubernetes - 如何在 ISTIO 中配置 TLS 源?

    javascript - ExpressJS 路由无法解析

    amazon-web-services - AWS ALB : Path based routing not forwarding to target group

    go - Go Transport 中的 keep-alive TTL 从不关闭连接