本文介绍阿里云容器服务ACK产品功能使用的常见问题。

Ingress组件是什么?其为什么需要SLB?

Ingress组件是Kubernetes的一个网络组件,主要提供HTTP层(7层)路由功能,相比TCP(4层)的负载均衡具备非常多的优势。例如,Ingress的路由规则更加灵活,且支持金丝雀、蓝绿和A/B Test发布模式,支持SSL加密、日志可视化分析和监控,以及自定义扩展等功能,是目前K8s中HTTP和HTTPS服务的主流暴露方式。

当您在创建集群时候,如果有对外暴露服务的需求,则推荐您安装Ingress组件。ACK通过集群内的Nignx Ingress Controller和云上的负载均衡SLB实现该功能。ACK负责Ingress组件的升级,同时配有Ingress日志可视化分析与监控功能,与阿里云日志服务SLS完全打通。关于Ingress日志可视化分析与监控的方案详情,请参见日志分析与监控的最佳实践

关于Ingress访问日志分析与监控,请参见Ingress访问日志分析与监控

关于如何使用Ingress指标进行弹性伸缩,请参见Kubernetes弹性伸缩全场景解读

Ingress组件的SLB实例怎么转成包年包月的套餐?

Ingress组件的实现是通过服务Service,Service的配置可以通过修改YAML文件实现。但由Service自动创建的按量付费SLB实例不能手动转换成包年包月的套餐,否则会导致Service异常。如果您需要将SLB实例的计费方式改为包年包月,请按照以下步骤操作:

说明 kube-system命名空间里存放的是K8s组件的服务,通常情况下不要删改这些服务。

步骤一:创建包年包月的SLB

具体操作,请参见创建实例

步骤二:将Service绑定到新创建的SLB

说明 修改或切换SLB时,建议集群上不要有流量,在确保新的SLB监听生效前先不要删除老的SLB。更多信息,请参见Service的负载均衡配置注意事项
  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群管理页左侧导航栏中,选择网络 > 服务
  5. 服务页面,在命名空间的下拉列表中,选择kube-system
  6. 服务页面的名称列,找到名称为nignx-ingress-lb的服务。
  7. 单击nignx-ingress-lb服务右侧操作列下查看YAML
  8. 编辑YAML对话框中,修改对应的YAML。

    YAML样例如下:

    kind: Service
    metadata:
      name: nginx-ingress-lb
      namespace: kube-system
      labels:
        app: nginx-ingress-lb
      annotations:
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: "<$YOUR_LOADBALACER_ID>"      #在Service上指定新SLB的实例ID。
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true"  #由CCM接管节点监听的创建。
    spec:
      type: LoadBalancer
      externalTrafficPolicy: Local
      ports:
        - port: 80
          name: http
          targetPort: 80
        - port: 443
          name: https
          targetPort: 443
      selector:
        app: ingress-nginx

    更多信息,请参见通过Annotation配置负载均衡

步骤三:删除旧的SLB

说明 建议您等流量完全切换到新的SLB上,才删除旧的SLB。
  1. 监控流量是否已完全切换到新的SLB上。关于监控流量的方法,请参见通过控制台查看监控
  2. 如果流量已完全切换到新的SLB上,删除旧的SLB。关于删除SLB的方法,请参见实例删除保护释放实例

节点池是什么?

传统模式下的节点管理是用Kubernetes打标签的方式来对节点进行分类管理,但是随着节点规模和标签数量的增加,对节点分类运维会变得越来越复杂。节点池(NodePool)对节点分组划分,进行了更高维度的抽象,方便您批量管理、指定调度、配置节点自动弹性伸缩等。

ACK节点池类型有节点池、托管节点池。更多信息,请参见节点池概述

ACK支持哪些灰度发布和蓝绿发布方式?

一共有四种发布方式:

  • 利用阿里云容器服务ACK的Ingress功能,实现灰度发布和蓝绿发布。具体操作,请参见通过Ingress实现灰度发布和蓝绿发布
  • Kubernetes集群中使用阿里云SLB实现四层金丝雀发布。SLB的控制力最弱,成本最高,只能通过控制Pod个数来切换版本。具体操作,请参见Kubernetes集群中使用阿里云SLB实现四层金丝雀发布
  • Istio基于ASM完成蓝绿和灰度发布。Istio非常精细流量管控,可以做多层,但是门槛很高。如果采用该发布方案,您需要在K8s熟练的基础上还要掌握Istio开源框架的基本模型。具体操作,请参见基于ASM完成蓝绿和灰度发布
  • 灰度发布是可以帮助您渐进式更新Deployment的工具。它能结合Ingress Controller实现多版本共存,发布暂停,流量百分比切换,健康检查等功能,极大解放灰度发布过程中的手动操作,全自动化实现线上灰度流量切换。具体操作,请参见灰度发布概述

如果我想使用Istio,推荐使用什么方案呢?

推荐您开通阿里云服务网格(Alibaba Cloud Service Mesh,简称ASM),免费产品,全面兼容Istio,且不用自行安装部署。通过流量控制、网格观测以及服务间通信安全等功能,服务网格可以全方位地简化您的服务治理,并为运行在异构计算基础设施上的服务提供统一的管理能力,适用于Kubernetes集群、Serverless Kubernetes集群、ECS虚拟机以及自建集群。

关于ASM更多信息,请参见什么是服务网格ASM?

如何限制容器之间的访问?

Kubernetes网络的基本模型是需要Pod之间全互联,但在一个K8s集群里,有一些调用链之间可能不是直接调用的关系。例如,两个部门之间希望相互之间权限隔离,此时就可以用到策略的概念。您可以通过Network Policy进行控制,通过标签选择器选择特定Pod控制其出入流向,可以针对IP段、端口和协议来进行控制。关于如何使用网络策略Network Policy,请参见使用网络策略Network Policy

更多网络概念,请参见Kubernetes网络概念及策略空控制