华为云UCS-使用MCI:创建MCI对象
创建MCI对象
- 使用kubectl连接集群联邦,详细操作请参见使用kubectl连接集群联邦。
- 创建并编辑 mci.yaml 文件,文件内容定义如下所示,参数定义请参见表1。
vi mci.yaml
apiVersion: networking.karmada.io/v1alpha1 kind: MultiClusterIngress metadata: name: nginx-ingress namespace: default annotations: karmada.io/elb.conditions.nginx-svc: '[{ "type": "header", "headerConfig": { "key":"x-header", "values": [ "green" ] } }]' karmada.io/elb.id: 90f9f782-1243-41cc-a57d-6157f6cb85bf karmada.io/elb.projectid: 65382450e8f64ac0870cd180d14e684b karmada.io/elb.health-check-flag.nginx-svc: "on" # 对应服务的健康检查配置项开关 karmada.io/elb.health-check-option.nginx-svc: '{"protocol":"TCP"}' # 对应服务的健康检查配置项 spec: ingressClassName: public-elb rules: - host: demo.localdev.me http: paths: - backend: service: name: nginx-svc # 准备一个名为nginx-svc的联邦service port: number: 8080 # 端口号为8080 path: /web pathType: Prefix
MCI对象的结构体定义与networking.kubernetes.io/v1版本Ingress一致,不同之处在于后端服务需要填写为联邦Service,即在U CS 控制台创建的Service,具体请参见集群内访问(ClusterIP)。
在配置MCI文件内容的过程中需要遵守的约束条件如下:
- apiVersion,kind,name必须指定。
- spec下不允许填写TLS和DefaultBackend字段。
- rules、paths不能为空。
- host必须是DNS名称,不可以是IP地址。
- service中所指定的后端服务必须是存在的、且输入的相关信息(如端口)是正确的,否则会导致访问服务失败。若您已经创建了参数信息错误的MCI对象,请参考4中的命令更新该MCI对象。
- paths中,配置的高级转发策略(karmada.io/elb.conditions.{service name})越多的后端(backend)在paths中的位置应该越靠前。因为backend在paths中配置的位置越靠前,其转发优先级越高。
示例:如果为后端X配置两条转发策略a和b,为后端Y配置一条转发规则a,则此时paths中X的配置顺序应在Y之前,否则,同时符合a、b两条转发规则的流量将按照优先级顺序全部转发至Y中。
- backend下不允许填写resource字段。
- path值需要是绝对路径;不合法的path值:invalidPathSequences = []string{"//", "/./", "/../", "%2f","%2F"},invalidPathSuffixes = []string{"/..", "/."}。
- pathType合法值:Exact、Prefix、ImplementationSpecific。
- 在默认配置下,Service名称的长度限制最长支持50个字符。
表1 关键参数说明 参数
是否必填
参数类型
描述
karmada.io/elb.id
是
String
MCI关联的elb的id,不允许为空。
取值范围:1-32个字符。
karmada.io/elb.projectid
是
String
MCI关联的elb所属的项目ID,获取方法请参见获取项目ID。
取值范围:1-32个字符。
karmada.io/elb.port
否
String
MCI关联的elb的端口,不填时默认为80。
取值范围:1-65535。
karmada.io/elb.health-check-flag.nginx-svc
否
String
是否启用健康检查,可选值为:
- on:开启
- off:不开启
不填写时默认为off。
说明:该标签为"karmada.io/elb.health-check-flag.{serviceName}",仅对对应的service生效;
karmada.io/elb.health-check-option.{service name}
否
HealthCheck Object
健康检查参数,详情请参见HealthCheck。{service name}请修改为联邦Service的名称。
说明:- 健康检查参数配置示例:
karmada.io/elb.health-check-option.nginx-svc: '{"protocol":"TCP","delay":"5","connect_port":"80","timeout":"1","max_retries":"1","path":"/wd"}'
- 在annotation开启健康检查配置的情况下,Service名称的长度不应超过39个字符。
karmada.io/elb.conditions.{service name}
否
Array of Condition Object
高级转发策略,详情请参见Condition。{service name}请修改为联邦Service的名称。
karmada.io/elb.lb-algorithm.{service name}
否
String
转发算法:
- ROUND_ROBIN:加权轮询算法。
- LEAST_CONNECTIONS:加权最少连接算法。
- SOURCE_IP:源IP算法。
不填写时默认为ROUND_ROBIN。
{service name}请修改为联邦Service的名称。
karmada.io/elb.keepalive_timeout
否
string
客户端连接空闲超时时间,单位为秒。当一直未请求的时间超过配置值,负载均衡会暂时中断当前连接,直到下一次请求时再重新建立新的连接。
不填写时默认为60s。
取值范围:0-4000s
karmada.io/elb.client_timeout
否
string
等待客户端请求超时时间,单位为秒。
不填写时默认值为60s。
取值范围:1-300s
karmadas.io/elb.member_timeout
否
string
等待后端服务器响应超时时间,单位为秒。请求转发后端服务器后,若未响应时间超过配置值,负载均衡将终止等待,并返回HTTP 504错误码。
不填写时默认为60s。
取值范围:1-300s
ingressClassName
是
String
ingressClass名称。取值必须为public-elb。
host
否
String
为服务访问 域名 配置。请确保所填写的域名已注册并备案,一旦配置了域名规则后,必须使用域名访问。
不填写时默认不显示该字段,表示域名全匹配。
backend
否
Backend Object
后端,是Service和端口名称的组合。对于发往MCI的 HTTP和HTTPS请求,如果与规则中的主机和路径匹配,则会被发送到所列出的后端。
注意:后端在paths中的配置顺序决定了策略的转发优先级。
示例:如果为后端X配置两条转发策略a和b,为后端Y配置一条转发规则a,则此时paths中X的配置顺序应在Y之前,否则,同时符合a、b两条转发规则的流量将按照优先级顺序全部转发至Y中。
path
是
String
路由路径,您可以自定义设置。所有外部访问请求需要匹配host和path。
说明:此处添加的访问路径要求后端应用内存在相同的路径,否则转发无法生效。
例如,Nginx应用默认的Web访问路径为“/usr/share/nginx/html”,在为Ingress转发策略添加“/test”路径时,需要应用的Web访问路径下也包含相同路径,即“/usr/share/nginx/html/test”,否则将返回404。
pathType
是
String
路径类型。- ImplementationSpecific: 匹配方法取决于具体Ingress Controller的实现。在CCE中会使用ingress.beta.kubernetes.io/url-match-mode指定的匹配方式。
- Exact:精确匹配 URL 路径,且区分大小写。
- Prefix:前缀匹配,且区分大小写。该方式是将URL路径通过“/”分隔成多个元素 ,并且对元素进行逐个匹配。 如果URL中的每个元素均和路径匹配,则说明该URL的子路径均可以正常路由。
说明:
- Prefix匹配时每个元素均需精确匹配,如果URL的最后一个元素是请求路径中最后一个元素的子字符串,则不会匹配 。例如:/foo/bar匹配/foo/bar/baz,但不匹配/foo/barbaz。
- 通过“/”分隔元素时,若URL或请求路径以“/”结尾,将会忽略结尾的“/”。例如:/foo/bar会匹配/foo/bar/。
关于Ingress路径匹配示例,请参见示例。
表2 HealthCheck参数说明 参数
是否必填
参数类型
描述
protocol
否
String
健康检查使用的协议,支持TCP/HTTP,默认值是HTTP。
connect_port
否
Int
健康检查使用的端口。取值范围[1,65535],为可选参数。
说明:默认使用后端服务器默认业务端口进行健康检查。指定特定端口后,使用指定的端口进行健康检查。
delay
否
Int
健康检查的延迟时间,以秒为单位,1-50,默认值是5秒。
timeout
否
Int
健康检查的超时时间,以秒为单位,1-50,默认值是10秒。
path
否
String
健康检查的请求URL,当type为HTTP/HTTPS时生效。
以"/"开头,默认为"/"。支持使用字母、数字和短划线(-)、正斜线(/)、半角句号(.)、百分号(%)、半角问号(?)、井号(#)和and(&)以及扩展字符集。长度为1-80个字符。
max_retries
否
Int
最大重试次数,取值范围1-10,默认值是3次。
表3 Condition参数说明 参数
是否必填
参数类型
描述
type
是
String
高级转发策略类型,当前仅支持header。
headerConfig
是
headerConfig Object
高级转发策略对象,详情请参见headerConfig。
- 执行如下命令创建MCI对象。
kubectl apply -f mci.yaml
回显如下。
multiClusterIngress.networking.karmada.io/nginx-ingress created
- 创建完成后,可以执行如下命令操作MCI对象。其中nginx-ingress为MCI对象的名称。
- 获取MCI对象:kubectl get mci nginx-ingress
- 更新MCI对象:kubectl edit mci nginx-ingress
- 删除MCI对象:kubectl delete mci nginx-ingress
- 华为云对象存储服务免费吗_对象存储试用_OBS对象存储如何使用
- 对象存储什么意思_华为云对象存储使用_对象存储OBS免费版
- 对象存储怎么用_对象存储OBS使用_OBS对象存储直播教程
- OBS对象存储是免费的吗_对象存储服务_对象存储如何使用
- 对象存储收费吗_对象存储是什么_华为云对象存储
- 如何使用模板创建函数_模板创建函数_函数工作流 FunctionGraph-华为云
- 容器镜像创建用户并授权使用SWR_华为云SWR_容器镜像创建授权
- 对象存储使用方式_OBS对象存储操作指南_好用的云存储
- OBS对象存储优点_华为云对象存储试用_什么是对象存储
- 云存储什么意思_对象存储使用场景_对象存储服务优势