详情页标题前

阿里云容器服务ACK通过MSE Ingress访问容器服务-云淘科技

详情页1

MSE Ingress是基于阿里云MSE云原生网关构建的Ingress服务,兼容Nginx Ingress以及Nginx Ingress Annotation,支持多服务版本同时灰度发布、灵活的服务治理能力以及全方位的安全防护保障,能够满足大规模云原生分布式应用的流量治理诉求。本文介绍如何通过MSE Ingress访问容器服务。

前提条件

  • 已开通MSE微服务引擎。

  • 已为ACK集群安装MSE Ingress Controller组件。以下两种方式选择一种即可。

    • 在ACK创建集群时,通过在组件配置向导页面的Ingress字段右侧,选择MSE Ingress,为集群安装MSE Ingress Controller组件。

    • 若已创建ACK集群,在组件管理页面,可安装MSE Ingress Controller组件。具体操作,请参见安装MSE Ingress Controller组件。

    说明

    您的集群版本需为1.16及以上。关于创建集群的具体操作,请参见创建Kubernetes专有版集群或者创建Kubernetes托管版集群;关于升级集群的具体操作,请参见升级ACK集群K8s版本。

  • 已为MSE Ingress Controller授予相关权限。具体操作,请参见为容器服务中的MSE Ingress Controller授权。

  • 已通过kubectl工具连接ACK集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。

背景信息

在容器服务领域,您可以通过定义Ingress资源来管理对外暴露的内部服务。Ingress是允许访问集群内Service的规则集合,您可以在目标容器服务集群定义Ingress资源来配置转发规则,实现不同URL访问集群内不同的Service。

Ingress指流量治理规则,而Ingress Controller是Ingress资源的实施者,其中Nginx Ingress Controller较为常见。但Nginx Ingress Controller无法满足云原生应用服务对复杂业务路由、多种应用层协议(例如Dubbo和QUIC)、大规模七层流量能力的需求。

MSE Ingress是阿里云推出的下一代网关,具备低成本、安全、高集成和高可用的产品优势。关于MSE Ingress的介绍和工作原理,请参见MSE Ingress概览。

步骤一:通过MseIngressConfig配置MSE云原生网关实例

MseIngressConfig是由MSE Ingress Controller提供的CRD资源,MSE Ingress Controller使用MseIngressConfig来管理MSE云原生网关实例的生命周期以及全局配置。

重要

  • 一个MseIngressConfig对应一个MSE云原生网关实例,如果您需要使用多个MSE云原生网关实例,需要创建多MseIngressConfig配置。

  • 除复用场景外,删除MseIngressConfig配置,会级联删除对应的MSE云原生网关实例。

执行以下命令,创建一个实例名称为mse-ingress,该实例包含3个2c4g副本,且交换机、SLB和安全组等其他信息会取默认值。更多关于MseIngressConfig的配置信息,请参见MseIngressConfig说明。

说明

  1. 交换机若未设置时,则默认取MSE Ingress Controller被调度到的K8s Node节点所在的交换机,导致被创建的MSE云原生网关实例处于单交换机模式,生产环境建议手动配置两个交换机。

  2. SLB未设置时,则默认为MSE云原生网关创建一个slb.s2.small规格的公网SLB。

  3. 安全组未设置时,则默认为MSE云原生网关创建普通类型的安全组。

cat << EOF | kubectl apply -f -
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
  name: test
spec:
  name: mse-ingress
  common:
    instance:
      spec: 2c4g
      replicas: 3
EOF

以上Spec中出现的配置项说明如下:

参数

说明

是否可选

示例值

spec.name

MSE云原生网关实例名称。

可选

mse-ingress

spec.common.instance.spec

MSE云原生网关实例的规格。默认为4c8g。

可选

2c4g

spec.common.instance.replicas

MSE云原生网关实例的副本数。默认为3个。

可选

3

步骤二:配置IngressClass

目前,MSE Ingress支持两种方式配置IngressClass,您可以根据实际的业务场景选择对应的方式。

  • 通过K8s IngressClass资源方式

    通过标准的K8s IngressClass资源为MSE Ingress配置IngressClass,该方式适用于新业务接入MSE Ingress的场景。

  • 通过MseIngressConfig资源方式

    通过MseIngressConfig中Ingress相关的配置为MSE Ingress配置IngressClass,该方式适用于从其他Ingress(如Nginx Ingress)迁移至MSE Ingress的场景。因为一个K8s集群中只能有一个同名的IngressClass资源,而迁移时需要Nginx Ingress和MSE Ingress同时监听相同的IngressClass,所以MSE Ingress额外提供了通过MseIngressConfig资源方式配置IngressClass。

通过K8s IngressClass资源方式

IngressClass是Ingress处理器的描述,用于在K8s集群中声明一个Ingress处理器实现,关联该IngressClass的Ingress资源会被该Ingress处理器解析。此外,需要通过IngressClass的Parameter字段关联一个MseIngressConfig(MSE云原生网关),用于实施被解析的Ingress资源描述的流量管理规则。

执行以下命令,创建IngressClass资源,并在spec.parameters中关联步骤一:通过MseIngressConfig配置MSE云原生网关实例创建的MseIngressConfig配置。

1.19之前版本集群

cat << EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1beta1
kind: IngressClass
metadata:
  name: mse
spec:
  controller: mse.alibabacloud.com/ingress
  parameters:
    apiGroup: mse.alibabacloud.com
    kind: MseIngressConfig
    name: test
EOF

1.19及之后版本集群

cat << EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: mse
spec:
  controller: mse.alibabacloud.com/ingress
  parameters:
    apiGroup: mse.alibabacloud.com
    kind: MseIngressConfig
    name: test
EOF

通过MseIngressConfig资源方式

主要适用于迁移的场景,或者是无法创建IngressClass资源的场景。您可以通过MseIngressConfig中Ingress相关的配置,为MSE Ingress配置IngressClass。

比如,修改步骤一创建的MseIngressConfig配置,配置IngressClass为mse。

apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
  name: test
spec:
  name: mse-ingress
  common:
    instance:
      spec: 2c4g
      replicas: 3
  ingress:
    local:
      ingressClass: mse

参数

说明

ingress

ingress的监听配置。

ingress.local

为云原生网关配置当前容器服务集群的Ingress的监听配置。

ingress.local.ingressClass

云原生网关监听集群中具体IngressClass下的Ingress资源,可选值如下所示。

  • 未配置:不监听任何Ingress资源。

  • 配置为mse:监听IngressClass为mse的Ingress资源。

  • 配置为空””:监听所有Ingress资源。

  • 配置为nginx:监听IngressClass为nginx或者未关联任何IngressClass的Ingress资源。

  • 配置为其他值:监听IngressClass为指定值的Ingress资源。

说明

该配置的优先级低于用户通过IngressClass资源关联MseIngressConfig的方式。

验证IngressClass配置成功

执行以下命令,查询MseIngressConfig的状态。当状态显示为 Listening时,表示云原生网关创建成功并且处于运行状态。并自动监听集群中IngressClass为mse的Ingress资源。

kubectl get MseIngressConfig test

预期结果为:

NAME   STATUS      AGE
test   Listening   3m15s

说明

MseIngressConfig会按照Pending >Running > Listening的状态依次变化。各状态说明如下:

  • Pending :表示云原生网关正在创建中,需等待3min左右。

  • Running :表示云原生网关创建成功,并处于运行状态。

  • Listening:表示云原生处于运行状态,并监听集群中Ingress资源。

  • Failed:表示云原生网关处于非法状态,可以查看Status字段中Message来进一步明确原因。

步骤三:通过MSE Ingress访问容器服务

  1. 执行以下命令,部署以下后端服务go-httpbin。

    cat << EOF | kubectl apply -f -
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: go-httpbin
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: go-httpbin
      template:
        metadata:
          labels:
            app: go-httpbin
            version: v1
        spec:
          containers:
            - image: specialyang/go-httpbin:v3
              args:
                - "--port=8090"
                - "--version=v1"
              imagePullPolicy: Always
              name: go-httpbin
              ports:
                - containerPort: 8090
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: go-httpbin
      namespace: default
    spec:
      ports:
        - port: 80
          targetPort: 8090
          protocol: TCP
      selector:
        app: go-httpbin
    EOF
  2. 执行以下命令,创建Ingress资源。代码中域名example.com下的/version路由规则暴露后端服务go-httpbin。

    1.19之前版本集群

    cat << EOF | kubectl apply -f -
    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      name: ingress
      namespace: default
    spec:
      ingressClassName: mse
      rules:
       - host: example.com
         http:
          paths:
          - path: /version
            backend:
              serviceName: go-httpbin
              servicePort: 80
    EOF

    1.19及之后版本集群

    cat << EOF | kubectl apply -f -
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ingress
      namespace: default
    spec:
      ingressClassName: mse
      rules:
      - host: example.com 
        http:
          paths:
          - backend:
              service:
                name: go-httpbin
                port:
                  number: 80
            path: /version
            pathType: Prefix
    EOF
  3. 查看目标Ingress的IP地址。

    kubectl get ingress ingress

    预期输出:

    NAME      CLASS   HOSTS            ADDRESS         PORTS   AGE
    ingress   mse     example.com      114.55.XX.XX   80      12m
  4. 执行以下命令,进行访问测试。

    curl -H "host: example.com" 114.55.XX.XX/version

    预期输出:

    version:v1

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/170727.html

(0)
上一篇 2023年12月10日
下一篇 2023年12月10日
详情页2

相关推荐

  • 阿里云容器服务ACKNginx Ingress、ALB Ingress和MSE Ingress对比-云淘科技

    ACK、ACK Serverless均支持Nginx Ingress、ALB Ingress和MSE Ingress。Nginx Ingress需要您自行维护,ALB Ingress和MSE Ingress为全托管模式。通过多个维度进行对比,本文介绍Nginx Ingress、ALB Ingress和MSE Ingress之间的差异。 背景信息 Nginx …

    阿里云容器服务 2023年12月10日
  • 阿里云日志服务SLS使用前须知-云淘科技

    阿里云微服务引擎MSE联合日志服务推出网关日志投递功能,用于记录网关访问日志,帮助您了解客户端用户行为、客户端用户的地域分布情况,及时排查问题。本文介绍网关日志投递功能相关的资产、费用、使用限制等信息。 资产详情 Project和Logstore 重要 在停止使用网关日志投递功能前,请勿删除访问日志相关的日志服务Project和Logstore,否则将导致已…

    阿里云日志服务SLS 2023年12月10日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云容器服务ACKNginx Ingress、ALB Ingress和MSE Ingress对比-云淘科技

    ACK、ACK Serverless均支持Nginx Ingress、ALB Ingress和MSE Ingress。Nginx Ingress需要您自行维护,ALB Ingress和MSE Ingress为全托管模式。通过多个维度进行对比,本文介绍Nginx Ingress、ALB Ingress和MSE Ingress之间的差异。 背景信息 Nginx …

    阿里云容器服务 2023年12月10日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。