【问题标题】:How to integrate Kubernetes with existing AWS ALB?如何将 Kubernetes 与现有的 AWS ALB 集成?
【发布时间】:2018-07-01 05:42:16
【问题描述】:

我想将现有的 AWS ALB 用于我的 kubernetes 设置。即我不希望 alb-ingress-controller 创建或更新任何现有的 AWS 资源,即。目标群体、角色等。

如何让 ALB 与 Kubernetes 集群通信,从而将请求传递给现有服务并将响应返回给 ALB 以显示在前端?

我尝试了this,但它会为新的入口资源创建新的 ALB。我想使用现有的。

【问题讨论】:

    标签: amazon-web-services docker amazon-ec2 kubernetes microservices


    【解决方案1】:

    您基本上必须在运行 Kubernetes Pod 的实例上打开一个节点端口。然后您需要让 ALB 指向这些实例。有两种配置方式。通过 Pod 或服务。

    要通过服务配置它,您需要指定.spec.ports[].nodePort。在默认设置中,端口需要介于 3000032000 之间。此端口在每个节点上都打开,并将被重定向到指定的 Pod(可能在任何其他节点上)。这样做的缺点是有另一个跃点,在使用多可用区设置时也可能会花钱。示例服务可能如下所示:

    ---
    apiVersion: v1
    kind: Service
    
    metadata:
      name: my-frontend
      labels:
        app: my-frontend
    
    spec:
      type: NodePort
      selector:
        app: my-frontend
      ports:
      - port: 8080
        nodePort: 30082
    

    要通过 Pod 配置它,您需要指定 .spec.containers[].ports[].hostPort。这可以是任何端口号,但它必须在调度 Pod 的节点上是空闲的。这意味着每个节点只能有一个 Pod,并且可能与其他应用程序的端口冲突。这样做的缺点是,从 ALB 的角度来看,并非所有实例都是健康的,因为只有具有该 Pod 的节点才能接受流量。您可以添加一个边车容器,用于在 ALB 上注册当前节点,但这意味着额外的复杂性。一个示例可能如下所示:

    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    
    metadata:
      name: my-frontend
      labels:
        app: my-frontend
    
    spec:
      replicas: 3
    
      selector:
        matchLabels:
          app: my-frontend
    
      template:
        metadata:
          name: my-frontend
          labels:
            app: my-frontend
    
        spec:
          containers:
          - name: nginx
            image: "nginx"
    
            ports:
            - containerPort: 80
              hostPort: 8080
    

    【讨论】:

      猜你喜欢
      • 2021-07-27
      • 2018-10-27
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      • 2020-07-06
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多