Ingress是Kubernetes中的一个资源对象,用来管理集群外部访问集群内部服务的方式。您可以通过Ingress资源来配置不同的转发规则,从而根据转发规则访问集群内Pod。本文介绍如何通过控制台和Kubectl方式创建、查看、更新和删除Nginx Ingress。
前提条件
已创建Kubernetes集群。具体操作,请参见创建Kubernetes托管版集群。控制台操作指导
创建Nginx Ingress
- 登录容器服务管理控制台,在左侧导航栏中选择集群。
- 在集群列表页面中,单击目标集群名称,然后在左侧导航栏中,选择 。
- 在路由页面单击创建,在创建对话框配置路由名称,本例中为nginx-ingress。
- 配置路由规则。路由规则是指授权入站到达集群服务的规则,支持HTTP或HTTPS规则,配置项包括域名(虚拟主机名称)、URL路径、服务名称、端口配置和路由权重等。本例中配置添加一条复杂的路由规则,配置集群默认的测试域名和虚拟主机名称,展示基于域名的路由服务。
- 基于默认域名的简单路由,即使用集群的默认域名对外提供访问服务。
- 域名配置:使用集群的默认域名,本例中是
test.[cluster-id].[region-id].alicontainer.com
。在创建路由对话框中,会显示该集群的默认域名,域名格式是
*.[cluster-id].[region-id].alicontainer.com
;您也可在集群的基本信息页面中获取。 - 服务配置:配置服务的访问路径、名称以及端口。
- 访问路径配置:您可指定服务访问的URL路径,默认为根路径/,本例中不做配置。每个路径(Path)都关联一个Backend(服务),在阿里云SLB将流量转发到Backend之前,所有的入站请求都要先匹配域名和路径。
- 服务配置:支持服务名称、端口、服务权重等配置,即Backend配置。同一个访问路径下,支持多个服务的配置,Ingress的流量会被切分,并被转发到它所匹配的Backend。
- 域名配置:使用集群的默认域名,本例中是
- 基于域名的简单扇出路由。本例中使用一个虚拟的主机名称作为测试域名对外提供访问服务,为两个服务配置路由权重,并为其中一个服务设置灰度发布规则。若您在生产环境中,可使用成功备案的域名提供访问服务。
- 域名配置:本例中使用测试域名
foo.bar.com
。您需要修改Hosts文件添加一条域名映射规则。
118.178.XX.XX foo.bar.com #IP即是Ingress的Address。
说明 如果使用您自己的域名,需要自行在云解析DNS控制台添加域名的解析记录。 - 服务配置:配置服务的访问路径、服务名称、服务端口和服务权重。
- 访问路径配置:指定服务访问的URL路径。本例中不做配置,保留根路径/。
- 服务名称:本例中设置新旧两个服务new-nginx和old-nginx。
- 服务端口:暴露80端口。
- 权重设置:设置该路径下多个服务的权重。服务权重采用相对值计算方式,默认值为100,如本例中所示,新旧两个版本的服务权重值都是50,则表示两个服务的权重比例都是50%。
- 域名配置:本例中使用测试域名
- 基于默认域名的简单路由,即使用集群的默认域名对外提供访问服务。
- 配置TLS。选中开启TLS,配置安全的路由服务。具体请参见Ingress支持。
- 您可选择使用已有密钥。
- 登录Master节点,执行以下命令创建tls.key和tls.crt。
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=foo.bar.com/O=foo.bar.com"
- 创建一个Secret。
kubectl create secret tls foo.bar --key tls.key --cert tls.crt
- 执行命令
kubectl get secret
,您可看到该Secret已经成功创建。在Web界面可选择创建的foo.bar这个Secret。
- 登录Master节点,执行以下命令创建tls.key和tls.crt。
- 您可选择在TLS界面上利用已创建的TLS私钥和证书,一键创建Secret。
- 登录Master节点,执行以下命令创建tls.key和tls.crt。
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=foo.bar.com/O=foo.bar.com"
- 执行
vim tls.key
和vim tls.crt
获取生成的私钥和证书。 - 将证书和私钥的内容复制到TLS新建密钥的面板。
- 登录Master节点,执行以下命令创建tls.key和tls.crt。
- 您可选择使用已有密钥。
- 配置灰度发布策略,您可以选择社区版、阿里云版或不开启。
推荐使用社区版灰度发布方案。关于社区版和阿里云版的区别,请参见通过Nginx Ingress实现灰度发布和蓝绿发布。
- 配置注解。单击添加,在类型下拉框中,您可以:
- 选择自定义注解:输入注解名称和值,即Ingress的Annotation键值对,Ingress的注解请参见Annotations。
- 选择Ingress-Nginx:根据名称选择或搜索要配置的注解。您可为路由添加一条典型的重定向注解。即
nginx.ingress.kubernetes.io/rewrite-target:/
,表示将/path路径重定向到后端服务能够识别的根路径/。说明 本例中未对服务配置访问路径,因此不需要配置重定向注解。重定向注解的作用是使Ingress以根路径转发到后端,避免访问路径错误配置而导致的404错误。
- 添加标签。标签的作用是为Ingress添加对应的标签,标示该Ingress的特点。
- 最后单击创建,返回路由列表。等待一段时间,可以看到一条路由。
相关操作
您可以在路由页面单击目标路由操作列的详情、变更、删除,完成相关操作。
Kubectl操作指导
创建Nginx Ingress
- 创建Deployment和Service。
在创建Ingress资源之前,必须创建外部访问Kubernetes集群中的服务。
- 创建Ingress。
查看Nginx Ingress
执行以下命令,查看Ingress。
kubectl get ingress
更新Nginx Ingress
执行以下命令,更新Ingress。kubectl edit ingress <ingress名称>
删除Nginx Ingress
执行以下命令,删除Ingress。kubectl delete ingress <ingress名称>