上云无忧 > 文档中心 > 通过百度智能云容器引擎服务 CCE 使用K8S_Ingress
容器引擎服务CCE
通过百度智能云容器引擎服务 CCE 使用K8S_Ingress

文档简介:
Ingress 是 Kubernetes 提供的一种 7 层流量接入方式,它通过连接外部负载均衡与容器内部服务的方式对流量进行管理,相比 LoadBalancer Service,Ingress 可以简化主机对外开放端口的管理,同时利用外部负载的能力提供更完善的路由和安全规则,详情参考官网说明:Kubernetes Ingress。
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

Ingress 是 Kubernetes 提供的一种 7 层流量接入方式,它通过连接外部负载均衡与容器内部服务的方式对流量进行管理,相比 LoadBalancer Service,Ingress 可以简化主机对外开放端口的管理,同时利用外部负载的能力提供更完善的路由和安全规则,详情参考官网说明:Kubernetes Ingress

Ingress 主要由两部分组成:

  • Ingress 对象:提供 Ingress kubernetes 对象,能够通过 yaml 进行创建和更新,用于将服务与域名对应起来;
  • Ingress Controller:部署在集群中的公共组件,将 Ingress 服务的配置转化成外部负载均衡的配置,对负载均衡器进行管理和更新。

CCE 提供了基于百度智能云负载均衡服务的 Ingress-controller 的实现,用户在使用 Ingress 的同时将会联动创建和管理百度智能云应用型 BLB 服务,从而实现外部流量的接入和管理。Ingress 服务的使用方式与原生的 kubernetes 保持一致,用户可以通过百度智能云控制台或者 yaml 创建和管理 Ingress。

创建 Ingress

1.打开 CCE 控制台,在左侧【流量接入】子菜单中找到【Ingress】。

2.点击 Ingress 列表中的【新建Ingress】。

3.填写 Ingress 的信息,包括 Ingress 的名称、网络类型(是否购买EIP)、所在的集群、命名空间、监听端口、是否指定 BLB 及 EIP等;

4.如果所选集群是第一次部署 Ingress,需要勾选下方的同意创建 Ingress-Controller 选项。

注:由于第一次部署 Ingress 需要在集群创建 Ingress-Controller,因此集群在首次创建 Ingress 时,从 NotReady 状态变为 Ready 状态将需要等待一段时间。

证书管理

如果创建Ingress时,选择的监听端口包括HTTPS:443,则需要在创建Ingress时选择证书。

点击添加证书,可以将证书上传。需要填写证书名称,证书内容和私钥。请点击“查看参考样例”获取证书内容和私钥的填写示例。如果还有更多问题,请点击右下方链接进入“证书管理”的说明文档。

已经上传的证书将会存放在百度智能云安全认证服务中,可以通过点击个人头像,“管理我的证书”链接跳转至证书管理页面进行查看和管理。

配置转发规则

当创建好的 Ingress 进入 Ready 状态后,可以开始对 Ingress 的转发规则进行配置。

1.进入 Ingress 列表,点击 Ingress 的名称,进入到详情页。

2.在详情页中可以看到 Ingress 的相关配置,其中包括关联创建的应用型 BLB,如果需要的话,可以点击 BLB_ID 进入到应用型 BLB 的控制台对 BLB 进行查看(强烈建议不要在BLB页面修改相关配置)。

3.点击转发规则,可以看到当前 Ingress 的转发规则列表。

4.在规则列表左上角,点击编辑按钮,列表进入编辑状态,即可对规则进行添加、删除或者编辑。

5.为每一条新增的规则选择需要转发的协议类型、监听端口、域名、URI,以及转发到哪个后端服务和服务端口。当填写完成信息是,点击保存按钮即可。 注:后端服务必须暴露 NodePort(即 Service 为 NodePort 或 LoadBalancer 类型),关于服务的创建可参考流量接入的服务管理文档。

6.创建完转发规则后,可以在在列表右侧看到规则的状态,当规则状态为Ready时,说明后端服务的端口已经可以开始接受 BLB 转发的流量。

域名及 URI 规则

当单条规则出现域名和 URI 条件时,则需要两者分别满足以下条件,规则才能匹配成功:

  1. 域名转发规则匹配内容限制:

    • 限制长度<100;
    • 通配符仅支持*;
    • 通配符*可出现0次或1次
    • 通配符*可匹配0-n个字符;
    • 仅支持前缀匹配,即只可出现在域名的开头,如: .baidu.com
  2. URI 转发规则匹配内容限制:

    • 限制长度<100;
    • 通配符仅支持*;
    • 通配符*可出现0次或1次;
    • 通配符*可匹配0-n个字符;
    • 支持前、中、后缀匹配,即可出现在匹配规则的任意位置
    • 关于路由规则的详细介绍,可以参考应用型负载均衡文档。

使用 Ingress 的示例

1.在部署页面或服务页面用以下yaml内容创建示例 Deployment 和 Service:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ingress-nginx-deployment
  labels:
    app: ingress-nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: ingress-nginx
  template:
    metadata:
      labels:
        app: ingress-nginx
    spec:
      containers:
      - name: nginx
        image: hub.baidubce.com/cce/nginx-ingress
        ports:
        - containerPort: 80

---
kind: Service
apiVersion: v1
metadata:
  name: hello-service
spec:
  selector:
    app: ingress-nginx
  type: NodePort
  ports:
  - protocol: TCP
    port: 8000
    targetPort: 80

---
kind: Service
apiVersion: v1
metadata:
  name: world-service
spec:
  selector:
    app: ingress-nginx
  type: NodePort
  ports:
  - protocol: TCP
    port: 9000
    targetPort: 80

2.创建名为 helloworld 的 Ingress 对象:

3.配置 Ingress 转发规则:

  • www.cce-ingress.com/hello/* -> hello-service:8000/hello/
  • www.cce-ingress.com/world/* -> world-service:9000/world/

Service 对应后端服务必须支持转发策略的 URI,如果要支持所有情况,建议设置为 /*,这里对URI的路径要求很严格注意"/",设置如下所示:

4.修改本地 /etc/hosts,将 www.cce-ingress.com 指向 EIP(例如:106.12.52.80):

5.访问测试:

Ingress Annotation 说明

参数名 类型 说明 示例
kubernetes.io/ingress.class string 指定为 cce-ingress-controller 托管 "cce"
kubernetes.io/cce.ingress.blb-id string Ingress 绑定 BLB,修改或删除可能会导致 BLB 泄漏 "lb-asdfDsXS"
kubernetes.io/cce.ingress.internal string 是否只内网访问,默认 "false" "true" 或 "false"
kubernetes.io/cce.ingress.eip string Ingress 绑定 EIP,修改或删除可能会导致 EIP 泄漏 "100.0.0.1"
kubernetes.io/cce.ingress.eip-bandwidth-in-mbps string EIP 带宽,按流量计费 1~1000 mbps "500"
kubernetes.io/cce.ingress.timeout-in-seconds string 访问超时时间 1~3600 "1500"
kubernetes.io/cce.ingress.https string 是否支持 HTTPS "true" 或 "false"
kubernetes.io/cce.ingress.http-redirect string HTTP 是否支持 HTTPS 重定向,开启 HTTPS 才生效 "true" 或 "false"
kubernetes.io/cce.ingress.blb-cert-id string HTTPS 证书 ID "xs-asdfDESz"
kubernetes.io/cce.ingress.max-backend-count string BLB 挂载默认 RS 数,默认不做限制 "50"
kubernetes.io/cce.ingress.vpc-subnet-id string 指定 BLB VPC 子网,默认不使用 "sb-adfEsDzs"

CCE Ingress 为满足单个域名同时支持 HTTP 及 HTTPS 转发,新增如下两条 Annotation:

kubernetes.io/cce.ingress.http-rules:

[
    {
        "host":"baidu-cce-ingress.com",
        "http":{
            "paths":[
                {
                    "path":"/apple/",
                    "backend":{
                        "serviceName":"service-example",
                        "servicePort":80
                    }
                },
                {
                    "path":"/banana/",
                    "backend":{
                        "serviceName":"service-example",
                        "servicePort":80
                    }
                }
            ]
        }
    }
]

kubernetes.io/cce.ingress.https-rules

[
    {
        "host":"baidu-cce-ingress.com",
        "http":{
            "paths":[
                {
                    "path":"/orange/",
                    "backend":{
                        "serviceName":"service-example",
                        "servicePort":80
                    }
                }
            ]
        }
    }
]

规则逻辑如下:

for rule in rules:
    if rule in annotation_https_rules:
        setHTTPS(rule)
     
    if rule in annotation_http_rule:
        setHTTP(rule)
 
    if rule not in annotation_https_rules && rule not in annotation_http_rule:
        setHTTP(rule)
相似文档
  • 本文档介绍如何通过YAML创建和管理CCE Ingress。 创建Ingress Controller资源: 使用以下yaml内容创建Ingress Controller: kubectl create -f ingress-controller.yaml ingress-controller.yaml 如下所示: apiVersion: rbac.authorization.k8s.io/v1
  • 本文介绍如何利用百度云容器服务的Ingress功能,实现蓝绿发布。 背景信息: 灰度及蓝绿发布是为新版本创建一个与老版本完全一致的生产环境,在不影响老版本的前提下,按照一定的规则把部分流量切换到新版本,当新版本试运行一段时间没有问题后,将用户的全量流量从老版本迁移至新版本。
  • 本文介绍使用 Nginx Ingress 作为 Ingress 的实现方式。 Kubernetes Ingress 除了 CCE Ingress 实现之外,也可以使用 Kubernetes 社区的 Nginx Ingress实现。 Nginx 支持反向代理与负载均衡器等功能。 Nginx Ingress Controller 是 Ingress 控制器,使用 Nginx 实现反向代理功能,并通过解析集群中的 Ingress 来配置转发规则。
  • 对于 cce-ingress-nginx-controller 组件有 2 处位置可以对组件参数或 Ingress 资源进行配置。 我们可以在组件的 ConfigMap 配置组件的全局运行参数,或是在 Ingress Annotation 中对某个 Ingress 或是 Host、Rule 的配置进行修改。
  • NetworkPolicy 是 K8S 提供的一种资源,用于定义基于 Pod 的网络隔离策略。它描述了一组 Pod 能否与其它组 Pod 及其它 Endpoints 进行通信。本文主要演示如何使用开源工具 felix 或 kube-router 在 CCE 上实现 NetworkPolicy 功能。 用户可以根据集群的容器网络模式,选择对应的组件进行部署。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部