通过CCE使用K8S_Ingress
Ingress是Kubernetes提供的一种7层流量接入方式,它通过连接外部负载均衡与容器内部服务的方式对流量进行管理。相比LoadBalancer Service,Ingress可以简化主机对外开放端口的管理,同时利用外部负载的能力提供更完善的路由和安全规则,详情参考官网说明:Kubernetes Ingress。
Ingress主要由两部分组成:
- Ingress资源对象:提供Ingress Kubernetes对象,能够通过yaml进行创建和更新,将服务与域名对应起来。
- Ingress Controller:部署在集群中的公共组件,将Ingress资源对象的配置转化成外部负载均衡的配置,对负载均衡器进行管理和更新。
CCE提供了基于百度智能云负载均衡服务的CCE Ingress Controller的实现,用户在使用Ingress的同时将会联动创建和配置管理百度智能云负载均衡(应用型BLB)和弹性公网IP(EIP),从而实现对集群外部流量的接入和管理。Ingress的使用方式与原生的Kubernetes保持一致,用户可以通过百度智能云控制台或者yaml创建和管理Ingress。
创建 Ingress
创建Ingress需要进入Ingress控制台,配置Ingress的基本信息、证书、转发规则、高级配置,并确认资源创建Ready。
进入Ingress控制台
打开 CCE 控制台,在左侧“流量接入”子菜单中找到“Ingress”。
点击Ingress列表中的“新建Ingress”。
配置基本信息
在新建Ingress页面,首先填写基本信息部分:
- Ingress名称:按需填写。
- 命名空间:选择Ingress所在的命名空间。Ingress只能向所在命名空间的Service转发流量。
- 负载均衡器:支持应用型 BLB 和 Nginx 类型,Nginx类型请参考使用NGINX Ingress。需安装对应类型的组件。
- 访问类型:“公网”类型将为Ingress分配EIP,而“内网”类型不分配EIP。
- 指定BLB:可选新建或指定已有的应用型BLB。注意,一个BLB只能用于一个Ingress,不能复用。
- 指定EIP:可选新建或指定已有的EIP。注意,一个EIP只能用于一个Ingress,不能复用。
- 指定VPC子网:选择当前Ingress关联创建的BLB所在的子网。如果不是新建BLB而是指定了已有BLB,该选项不会生效。
配置证书
如果创建Ingress时,选择的监听端口包括HTTPS:443,则需要在创建Ingress时选择证书。
点击“添加证书”,可以将证书上传。需要填写证书名称,证书内容和私钥。请点击“查看参考样例”获取证书内容和私钥的填写示例。
如果还有更多问题,请点击右下方链接进入“证书管理”的说明文档。
配置HTTP/HTTPS转发规则
为每一条新增的规则,选择转发的协议类型、域名、URI,服务名称、服务端口:
- 监听协议:HTTP和HTTPS规则是互相独立的,如果需要在HTTP和HTTPS上都支持,需要分别在HTTP和HTTPS监听协议上都创建一次。
- 监听端口:跟随监听协议,HTTP为80,HTTPS为443。
-
域名:请按照格式约束填写域名。
- 限制长度<100;
- 通配符仅支持*;
- 通配符*可出现0次或1次;
- 通配符*可匹配0-n个字符;
- 仅支持前缀匹配,即只可出现在域名的开头,如:*.baidu.com。
-
URI:请按照格式约束填写URI。
- 限制长度<100;
- 通配符仅支持*;
- 通配符*可出现0次或1次;
- 通配符*可匹配0-n个字符;
- 支持前、中、后缀匹配,即可出现在匹配规则的任意位置。
- 服务名称:目前仅支持NodePort或LoadBalancer类型的Service,必需和Ingress处于同一命名空间。
- 服务端口:选择Service暴露的端口。
高级配置
CCE Ingress还支持一些高级配置:
- 超时时间:配置Ingress等待后端服务器响应的超时时间。
- HTTP重定向:是否打开HTTP重定向,将HTTP请求转发到HTTPS端口上。该选项仅在勾选HTTPS后出现。
- K8S标签:为当前Ingress资源添加一些K8S Label。
- 注释:为当前Ingress资源添加一些K8S Annotation。CCE定义的Annotation请参考BLB Ingress Annotation说明
等待部署完成
完成上述配置后,即可点击“完成”按钮完成创建。
刚刚创建的Ingress,详情页和转发规则页都会显示“NotReady”:
等待几分钟之后,Ingress完成配置,将会显示为“Ready”状态,此时Ingress已经可以使用了:
Ingress使用示例
在“部署”页面和“服务”页面分别以下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.访问测试: