更新时间:2024-09-29 GMT+08:00
通过控制台创建Nginx Ingress
Ingress是Kubernetes中的一种资源对象,用来管理集群外部访问集群内部服务的方式。您可以通过Ingress资源来配置不同的转发规则,从而根据转发规则访问集群内Pod。本文以Nginx工作负载为例,为您介绍如何使用控制台创建Nginx Ingress。
前提条件
- Ingress为后端工作负载提供网络访问,因此集群中需提前部署可用的工作负载。若您无可用工作负载,可参考创建无状态负载(Deployment)、创建有状态负载(StatefulSet)或创建守护进程集(DaemonSet)部署工作负载。
- 为上述工作负载配置ClusterIP类型或NodePort类型的Service,可参考集群内访问(ClusterIP)或节点访问(NodePort)配置示例Service。
- 添加Nginx Ingress时,需在集群中提前安装NGINX Ingress 控制器,具体操作可参考安装插件。
约束与限制
- 不建议在ELB服务页面修改ELB实例的任何配置,否则将导致服务异常。如果您已经误操作,请卸载Nginx Ingress插件后重装。
- Ingress转发策略中注册的URL需与后端应用提供访问的URL一致,否则将返回404错误。
- 负载均衡实例需与当前集群处于相同VPC 且为相同公网或私网类型。
- 负载均衡实例需要拥有至少两个监听器配额,且端口80和443没有被监听器占用。
添加Nginx Ingress
本节以Nginx作为工作负载并添加Nginx Ingress为例进行说明。
- 登录CCE控制台,单击集群名称进入集群。
- 选择左侧导航栏的“服务”,在右侧选择“路由”页签,单击右上角“创建路由”。
- 设置Ingress参数。
- 名称:自定义Ingress名称,例如nginx-ingress-demo。
- 命名空间:选择需要添加Ingress的命名空间。
- 对接Nginx:集群中已安装NGINX Ingress控制器插件后显示此选项,未安装该插件时本选项不显示。
- 前端协议:支持HTTP和HTTPS,安装NGINX Ingress控制器插件时预留的监听端口,默认HTTP为80,HTTPS为443。使用HTTPS需要配置相关证书。
- 证书来源:使用证书以支持HTTPS数据传输加密认证。
- 如果您选择“TLS密钥”,需要提前创建IngressTLS或kubernetes.io/tls类型的密钥证书,创建密钥的方法请参见创建密钥。
- 如果您选择“默认证书”,NGINX Ingress控制器会使用插件默认证书进行加密认证。默认证书可在安装NGINX Ingress控制器插件时进行自定义配置,未配置自定义证书时将使用NGINX Ingress控制器自带证书。
- SNI:SNI(Server Name Indication)是TLS的扩展协议,在该协议下允许同一个IP地址和端口号下对外提供多个基于TLS的访问域名,且不同的域名可以使用不同的安全证书。开启SNI后,允许客户端在发起TLS握手请求时就提交请求的域名信息。负载均衡收到TLS请求后,会根据请求的域名去查找证书:若找到域名对应的证书,则返回该证书认证鉴权;否则,返回缺省证书(服务器证书)认证鉴权。
- 转发策略配置:请求的访问地址与转发规则匹配时(转发规则由域名、URL组成),此请求将被转发到对应的目标Service处理。单击“添加转发策略”按钮可添加多条转发策略。
- 域名:实际访问的域名地址。请确保所填写的域名已注册并备案,在Ingress创建完成后,将域名与自动创建的负载均衡实例的IP(即Ingress访问地址的IP部分)绑定。一旦配置了域名规则,则必须使用域名访问。
- 路径匹配规则:
- 默认:默认为前缀匹配。
- 前缀匹配:例如映射URL为/healthz,只要符合此前缀的URL均可访问。例如/healthz/v1,/healthz/v2。
- 精确匹配:表示只有URL完全匹配时,访问才能生效。例如映射URL为/healthz,则必须为此URL才能访问。
- 路径:需要注册的访问路径,例如:/healthz。
- Nginx Ingress的访问路径匹配规则是基于“/”符号分隔的路径前缀匹配,并区分大小写。只要访问路径以“/”符号分隔后的子路径匹配此前缀,均可正常访问,但如果该前缀仅是子路径中的部分字符串,则不会匹配。例如URL设置为/healthz,则匹配/healthz/v1,但不匹配/healthzv1。
- 此处添加的访问路径要求后端应用内存在相同的路径,否则转发无法生效。
例如,Nginx应用默认的Web访问路径为“/usr/share/nginx/html”,在为Ingress转发策略添加“/test”路径时,需要应用的Web访问路径下也包含相同路径,即“/usr/share/nginx/html/test”,否则将返回404。
- 目标服务名称:请选择已有Service或新建Service。页面列表中的查询结果已自动过滤不符合要求的Service。
- 目标服务访问端口:可选择目标Service的访问端口。
- 操作:可单击“删除”按钮删除该配置。
- 注解:以“key: value”形式设置,可通过Annotations查询nginx-ingress支持的配置。
- 配置完成后,单击“确定”。
创建完成后,在Ingress列表可查看到已添加的Ingress。