【问题标题】:How to set AWS ALB instead of ELB in Istio?如何在 Istio 中设置 AWS ALB 而不是 ELB?
【发布时间】:2020-10-05 23:52:44
【问题描述】:

我正在尝试在 Kubernetes AWS 中设置 ALB 负载均衡器而不是默认的 ELB 负载均衡器。负载均衡器必须连接到 istio ingressgateway。我寻找解决方案,但只找到了one。 但是提到的 istio 版本是 V1,现在 istio 发生了很多变化。我尝试在图表中将服务类型更改为 nodeport(根据博客),但服务仍然作为负载均衡器提供。

有人可以提一下如何为 istio ingressgateway 配置 ALB 的步骤吗?

感谢阅读

【问题讨论】:

    标签: kubernetes devops kubernetes-ingress istio aws-application-load-balancer


    【解决方案1】:

    第 1 步:将 istioingresssgateway 服务类型更改为节点端口

    第 2 步:安装 ALB 入口控制器

    第 3 步:为 istioingressgateway 编写 ingress.yaml,如下所示:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      namespace: istio-system
      name: ingress
      labels:
        app: ingress
      annotations:
        kubernetes.io/ingress.class: alb
        alb.ingress.kubernetes.io/scheme: internet-facing
        alb.ingress.kubernetes.io/subnets: <subnet1>,<subnet2>
    spec:
      rules:
        - http:
            paths:
              - path: /*
                backend:
                  serviceName: istio-ingressgateway
                  servicePort: 80
    

    如果您将 vpc 的子网标记为:

    ,则可以避免

    alb.ingress.kubernetes.io/subnets 注释

    kubernetes.io/cluster/: 拥有

    kubernetes.io/role/internal-elb: 1(用于内部 ELB)

    kubernetes.io/role/elb: 1(用于外部 ELB)

    否则您可以提供两个子网值,每个子网应位于上述 yaml 中的不同可用区

    它在 Istio 1.6 中工作

    【讨论】:

    • 这仍然适用于 1.8.0 吗?我在目标群体中不断收到失败的健康检查。
    • @MichaelMartin,以及那些希望解决同样问题的人。您需要更改 ALB 目标组健康检查配置以使用 Istio 状态端口作为健康检查端口。使用映射 Istio 15021 targetPort 和 /healthz/ready URL 的 nodePort
    【解决方案2】:

    当前接受的答案是正确的。不过我想稍微更新一下。 安装和配置 AWS alb 控制器后,应采取几个步骤使其工作并可用:

    1. 使用istioctl manifest generate 命令生成清单列表
    2. 找到istio-ingressgateway服务配置
    3. 将其更新为 NodePort 类型
    4. 更新端口配置以具有节点和目标端口的预定义映射。注意status-port NodePort
    5. 应用这些清单,而不是使用istioctl install 命令安装/更新 istio。在某些情况下,依赖 istio helm 安装可能会更好
    6. 更新入口配置以具有以下注释
          alb.ingress.kubernetes.io/healthcheck-port: 'PORT'
          alb.ingress.kubernetes.io/healthcheck-path: /healthz/ready
          alb.ingress.kubernetes.io/healthcheck-protocol: HTTP```
    where PORT equals to the istio status-port NodePort value 
    
    This way, you update ALB default configuration for the healthcheck to check Istio healthcheck 
    

    【讨论】:

      【解决方案3】:

      我可以确认 tibin_tomy 在 Istio 1.7.4 上为我工作的解决方案。此外,我在第 1 步中使用了 ClusterIP 而不是 NodePort。

      Step1 - 将 istioingresssgateway 服务类型更改为 ClusterIP(使用 IstioOperator 安装 Istio):

      apiVersion: install.istio.io/v1alpha1
      kind: IstioOperator
      
      metadata:
        namespace: istio-system
        name:      istio
      spec:
        profile: default
        components:
          ingressGateways:
            - name: istio-ingressgateway
              k8s:
                service:
                  type: ClusterIP # Disable classic load balancer creation (default), routing to here will be done via Kubernetes Ingress resource
      

      注意:将“Ingress”部署在与 istio-ingressgateway 相同的命名空间中(默认为 istio-system)。 例如,如果 istio-ingressgateway 在命名空间 istio-system 中,而 Ingress 在命名空间系统中,则 aws-alb-ingress-controller 错误:

      "kubebuilder/controller "msg"="Reconciler error" "error"="failed to 由于未能加载 serviceAnnotation 导致协调 targetGroups 本地存储中没有对象匹配键“system/istio-ingressgateway” “控制器”=“alb-入口控制器” "request"={"Namespace":"system","Name":"sonata-ingress"}"

      【讨论】:

        猜你喜欢
        • 2020-06-20
        • 2018-01-27
        • 1970-01-01
        • 2019-08-04
        • 1970-01-01
        • 2018-08-24
        • 1970-01-01
        • 1970-01-01
        • 2021-12-23
        相关资源
        最近更新 更多