通过YAML创建CCE_Ingress
概述
本文档介绍如何通过 YAML 创建和管理 CCE Ingress。
本文档主要包含以下内容:
- 部署 CCE Ingress Controller。
- 创建 Deployment 与 Service。
- 创建 CCE Ingress。
- 访问测试。
注意: 一个 CCE Ingress 只能使用一个 BLB,一个 BLB 也只能被一个 CCE Ingress 使用。
前提条件
- 已创建可用的 CCE 集群,并具备集群管理权限。
- 已安装并配置 Kubernetes 客户端环境,可连接目标集群。
- 已准备可用于访问验证的域名解析环境。## 部署CCE Ingress Controller
CCE Ingress使用百度智能云负载均衡产品(BLB)实现,亦称为BLB类型Ingress。
CCE 不会为集群默认安装 Ingress Controller,用户可在组件管理中安装该组件。
导航路径:容器引擎 CCE 控制台 -> 集群列表 -> 目标集群 -> 运维与管理 -> 组件管理 -> 网络
操作步骤

- 在组件列表中定位
CCE Ingress Controller组件。

- 检查组件卡片中的安装入口:

创建示例 Deployment 和 Service
导航路径:容器引擎 CCE 控制台 -> 集群列表 -> 目标集群 -> 集群信息 -> 连接信息(获取集群访问凭证后,在终端执行)
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 name: ingress-nginx-deployment
5 labels:
6 app: ingress-nginx
7spec:
8 replicas: 2
9 selector:
10 matchLabels:
11 app: ingress-nginx
12 template:
13 metadata:
14 labels:
15 app: ingress-nginx
16 spec:
17 containers:
18 - name: nginx
19 image: hub.baidubce.com/cce/nginx-ingress
20 ports:
21 - containerPort: 80
22---
23kind: Service
24apiVersion: v1
25metadata:
26 name: hello-service
27spec:
28 selector:
29 app: ingress-nginx
30 type: NodePort
31 ports:
32 - protocol: TCP
33 port: 8000
34 targetPort: 80
35---
36kind: Service
37apiVersion: v1
38metadata:
39 name: world-service
40spec:
41 selector:
42 app: ingress-nginx
43 type: NodePort
44 ports:
45 - protocol: TCP
46 port: 9000
47 targetPort: 80
创建完成后,请确认 Deployment 副本已就绪,且 hello-service、world-service 的端口映射分别为 8000 -> 80、9000 -> 80。
创建 Ingress 对象
导航路径:容器引擎 CCE 控制台 -> 集群列表 -> 目标集群 -> 集群信息 -> 连接信息(获取集群访问凭证后,在终端执行)
使用以下yaml内容创建名为helloworld的Ingress对象,并配置Ingress转发规则:
- www.cce-ingress.com/hello/ -> hello-service:8000/hello/
- www.cce-ingress.com/world/ -> world-service:9000/world/
可通过Ingress Annotations中的参数对Ingress进行配置,例如指定BLB或EIP。
Service对应后端服务必须支持转发策略的URI,如果要支持所有情况,建议设置为/*,这里对URI的路径要求很严格注意“/”。
1apiVersion: networking.k8s.io/v1
2kind: Ingress
3metadata:
4 annotations:
5 cce.ingress.blb-backup-content: ""
6 kubernetes.io/cce.ingress.blb-cert-id: ""
7 kubernetes.io/cce.ingress.blb-id: ""
8 kubernetes.io/cce.ingress.eip: ""
9 kubernetes.io/cce.ingress.http-redirect: "false"
10 kubernetes.io/cce.ingress.https: "false"
11 kubernetes.io/cce.ingress.internal: "false"
12 kubernetes.io/cce.ingress.timeout-in-seconds: "30"
13 kubernetes.io/cce.ingress.vpc-subnet-id: ""
14 kubernetes.io/ingress.class: cce
15 name: helloworld
16 namespace: default
17spec:
18 rules:
19 - host: www.cce-ingress.com
20 http:
21 paths:
22 - backend:
23 service:
24 name: hello-service
25 port:
26 number: 8000
27 path: /hello/*
28 pathType: ImplementationSpecific
29 - backend:
30 service:
31 name: world-service
32 port:
33 number: 9000
34 path: /world/*
35 pathType: ImplementationSpecific
下文描述了创建CCE Ingress时,需要注意的事项。
Ingress Class
CCE Ingress Controller 仅处理带有 kubernetes.io/ingress.class: cce 注释的 Ingress,请确保 Ingress 带有该 Annotation。
HTTPS规则设置
CCE Ingress Controller 默认将 Ingress 资源的规则创建为 HTTP 规则,不会自动配置 HTTPS 规则。若要将某些规则配置为 HTTPS,应添加以下 Annotation:
-
指定BLB使用的证书。
Plain Text1kubernetes.io/cce.ingress.blb-cert-id: cert-id -
显式声明开启HTTPS。
Plain Text1kubernetes.io/cce.ingress.https: "true" -
指明使用HTTPS的规则。如果Spec中的某些规则需要使用HTTPS,还需要添加到该Annotation中。
Plain Text1kubernetes.io/cce.ingress.https-rules: >- 2 [ 3 { "host":"ad.com", 4 "http":{ 5 "paths":[ 6 {"path":"/*","backend":{"serviceName":"service-example","servicePort":80}} 7 ] 8 } 9 } 10 ]
完整的Annotation使用说明参考:BLB Ingress Annotation说明。
访问测试
导航路径:容器引擎 CCE 控制台 -> 集群列表 -> 目标集群 -> 网络 -> 路由
- 在 Ingress 列表中定位
helloworld,确认端点包含可访问的 EIP。 - 修改本地
/etc/hosts,将www.cce-ingress.com指向该 EIP,可在控制台或集群内查看 Ingress 信息:
1kubectl get ingress
2NAME HOSTS ADDRESS PORTS AGE
3helloworld www.cce-ingress.com <公网地址、内网地址> 80 <持续时间>
-
分别访问以下地址进行验证:
http://www.cce-ingress.com/hello/http://www.cce-ingress.com/world/

评价此篇文章
