云服务器内容精选

  • 注意事项 建议其他资源不要使用Ingress自动创建的ELB实例,否则在删除Ingress时,ELB实例会被占用,导致资源残留。 添加Ingress后请在CCE页面对所选ELB实例进行配置升级和维护,不可在ELB页面对配置进行更改,否则可能导致Ingress服务异常。 Ingress转发策略中注册的URL需与后端应用提供访问的URL一致,否则将返回404错误。 独享型ELB规格必须支持应用型(HTTP/HTTPS),且网络类型必须支持私网(有私有IP地址)。 同集群使用多个Ingress对接同一个ELB端口时,监听器的配置项(例如监听器关联的证书、监听器HTTP2属性等)均以第一个Ingress配置为准。
  • 通过控制台创建 登录CCE控制台,单击集群名称进入集群。 在左侧导航栏中选择“服务”,切换至“路由”页签,在右上角单击“创建路由”。 设置Ingress参数。本示例中仅列举必选参数,其余参数可根据需求参考通过控制台创建ELB Ingress进行设置。 名称:自定义服务名称,可与工作负载名称保持一致。 负载均衡器:选择弹性负载均衡的类型、创建方式。 类型:本例中仅支持选择“独享型”。 创建方式:本文中以选择已有ELB为例进行说明,关于自动创建的配置参数请参见负载均衡器。 监听器配置: 前端协议:支持HTTP和HTTPS。本文以HTTP协议为例。 对外端口:开放在负载均衡服务地址的端口,可任意指定。 高级配置: 配置 说明 使用限制 获取监听器端口号 开启后可以将ELB实例的监听端口从报文的HTTP头中带到后端云服务器。 独享型ELB实例支持配置。 获取客户端请求端口号 开启后可以将客户端的源端口从报文的HTTP头中带到后端云服务器。 独享型ELB实例支持配置。 重写X-Forwarded-Host 开启后将以客户端请求头的Host重写X-Forwarded-Host传递到后端云服务器。 独享型ELB实例支持配置。 图1 配置HTTP/HTTPS头字段 转发策略配置:填写 域名 匹配规则及需要访问的目标Service。请求的访问地址与转发规则匹配时(转发规则由域名、URL组成,例如:10.117.117.117:80/helloworld),此请求将被转发到对应的目标Service处理。 单击“确定”,创建Ingress。
  • 参数说明 表1 灰度发布参数说明 参数 是否必填 参数类型 描述 kubernetes.io/elb.canary 否 string 设置Ingress灰度发布的开关。设置为true后,配合不同的注解,可以实现不同的灰度发布功能。 取值范围:true 独享型负载均衡器生效。 设置为true后,不允许删除或修改。 kubernetes.io/elb.canary-weight 否 string 权重灰度发布权重值,设置后Ingress以权重灰度形式发布。 取值为0-100的正整数,为灰度流量分配的百分比。 发布成权重灰度Ingress时,该参数必填。 不能与其他灰度发布功能同时设置。 kubernetes.io/elb.session-affinity-mode 否 string 开启权重灰度发布后,配置会话保持能力。 灰度发布仅支持设置为 "HTTP_COOKIE"。 kubernetes.io/ elb.session-affinity-option 否 string 开启权重灰度发布会话保持能力后,会话保持的超时时间。 参数值为json字符串,格式如下: {"persistence_timeout": "1440"} 参数说明: 超时时间范围为1-1440。 默认值为1440。 kubernetes.io/elb.canary-by-header 否 string header灰度发布的Key值,表示请求头参数的名称。需要与kubernetes.io/elb.canary-by-header-value成对使用。 参数说明: 长度限制1-40字符,只允许包含字母、数字、中划线(-)和下划线(_)。 kubernetes.io/elb.canary-by-header-value 否 string header灰度发布的Values值,需要与kubernetes.io/elb.canary-by-header成对使用。 参数值为json格式的数组,例如: '{"values":["a","b"]}' 参数说明: 数组长度:最小值为1,最大值为10。 数组取值:长度限制1-128字符,不支持空格,双引号,支持以下通配符:*(匹配0个或更多字符)和?(正好匹配1个字符)。 kubernetes.io/elb.canary-by-cookie 否 string cookie灰度发布的key值,表示请求cookie参数的名称。需要与kubernetes.io/elb.canary-by-cookie-value成对使用。 参数说明: 长度限制1-100字符,支持包含字母、数字、以及 !%'"()*+,./:=?@^\\-_`~ 等字符。 kubernetes.io/elb.canary-by-cookie-value 否 string cookie灰度发布的values值,需要与kubernetes.io/elb.canary-by-cookie成对使用。 参数值为json格式的数组,例如: '{"values":["a","b"]}' 参数说明: 数组长度:最小值为1,最大值为10。 数组取值:长度限制1-100字符,不支持空格,支持包含字母、数字、以及 !%'"()*+,./:=?@^\\-_`~ 等字符。 kubernetes.io/elb.canary-related-ingress-uid 否 string 灰度发布Ingress关联的原始Ingress的uid信息,用于前端展示原始Ingress和灰度发布的Ingress的关联关系。 ● 参数格式:字符串 ● 取值:原始Ingress的metadata.uid字段
  • 灰度发布服务部署 部署原服务。 部署名为origin-server的工作负载。 部署名为origin-service的service,关联刚创建的origin-server工作负载。(CCE Standard集群创建nodeport类型Service,Turbo集群创建ClusterIP类型Service) 部署名为origin-ingress的Ingress,关联刚创建的origin-service服务。 Ingress的配置如下: apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: origin-ingress namespace: default annotations: kubernetes.io/elb.port: '81' kubernetes.io/elb.id: e491f4e7-2351-4984-ad0a-8569e5e964a3 kubernetes.io/elb.class: performance spec: rules: - host: nginx1.com http: paths: - path: / backend: service: name: origin-service port: number: 81 property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH pathType: ImplementationSpecific ingressClassName: cce 灰度发布新版本服务。 部署新版本工作负载、服务和Ingress,使得流量能够通过权重或者头域导流到新版本服务上。 部署名为canary-server的工作负载。 部署名为canary-service的服务,关联刚创建的canary-server工作负载。(CCE Standard集群创建nodeport类型Service,Turbo集群创建ClusterIP类型Service) 部署名为canary-weight-ingress的Ingress,关联刚创建的canary-service服务,实现权重灰度发布。 Ingress的配置如下: apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: canary-weight-ingress namespace: default annotations: kubernetes.io/elb.canary: 'true' // 设置为true,表示启用canary注解功能。 kubernetes.io/elb.canary-weight: '40' // 权重值设置,表示对应请求40%的流量将被导流到新版本服务上。 kubernetes.io/elb.class: performance // 仅独享型ELB支持灰度发布 kubernetes.io/elb.id: e491f4e7-2351-4984-ad0a-8569e5e964a3 kubernetes.io/elb.port: '81' spec: ingressClassName: cce rules: - host: nginx1.com http: paths: - path: / pathType: ImplementationSpecific backend: service: name: canary-service port: number: 81 property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH 部署名为canary-header-ingress的Ingress,关联刚创建的canary-service服务,实现Header灰度发布。 Ingress的配置如下: apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: canary-header-ingress namespace: default annotations: kubernetes.io/elb.canary: 'true' kubernetes.io/elb.canary-by-header: 'location' // header的key值设置为location kubernetes.io/elb.canary-by-header-value: '{"values":["hz","sz","sh"]}' // header的value值设置为hz、sz、sh kubernetes.io/elb.class: performance kubernetes.io/elb.id: e491f4e7-2351-4984-ad0a-8569e5e964a3 kubernetes.io/elb.port: '81' spec: ingressClassName: cce rules: - host: nginx1.com http: paths: - path: / pathType: ImplementationSpecific backend: service: name: canary-service port: number: 80 property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH 查看灰度发布新版本服务是否成功。 查看Ingress创建: $ kubectl get ingress NAME CLASS HOSTS ADDRESS PORTS AGE canary-header-ingress cce nginx1.com 88.88.88.165 80 46s canary-weight-ingress cce nginx1.com 88.88.88.165 80 117s origin-ingress cce nginx1.com 88.88.88.165 80 2m25s 查看ELB生成规则: 服务请求返回结果: 使用location:hz请求头的请求访问服务: $ curl -H "Host: nginx1.com" -H "location: hz" http://88.88.88.165:81/ 预期结果: $ new 多次访问,返回结果均为new 不使用请求头的请求访问服务: $ curl -H "Host: nginx1.com" http://88.88.88.165:81/ 预期结果:返回值40%为new,60%为old。 老版本服务下线。 新版本服务运行稳定后,需要下线老版本服务。下线流程将原服务Ingress中的Service修改为新版本服务的Service,使流量都路由到新版本服务上,然后删除灰度Ingress。 将原服务Ingress关联的Service更新为新版本Service。 apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: origin-ingress namespace: default annotations: kubernetes.io/elb.port: '81' kubernetes.io/elb.id: e491f4e7-2351-4984-ad0a-8569e5e964a3 kubernetes.io/elb.class: performance spec: rules: - host: nginx1.com http: paths: - path: / backend: service: name: canary-service port: number: 81 property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH pathType: ImplementationSpecific ingressClassName: cce 验证老版本服务是否下线完成。 使用带header和不带header的请求,多次访问。 $ curl -H "Host: nginx1.com" -H "location: hz" http://88.88.88.165:81/ $ curl -H "Host: nginx1.com" http://88.88.88.165:81/ 预期结果:输出均为new,无old返回。 确认老版本服务下线完成后,删除灰度发布Ingress。 $ kubectl delete ingress canary-weight-ingress canary-header-ingress
  • 约束与限制 该特性存在集群版本限制,仅在以下版本中生效: v1.23集群:v1.23.14-r0 及以上版本 v1.25集群:v1.25.9-r0 及以上版本 v1.27集群:v1.27.6-r0 及以上版本 v1.28集群:v1.28.4-r0 及以上版本 其他更高版本的集群 创建灰度Ingress后,不应删除原Ingress。 单个ELB下的监听器,如果关联的多个Ingress配置了多个灰度策略,头域优先级最高,cookie次之,权重优先级最低。