通过YAML创建CCE_Ingress
本文档介绍如何通过YAML创建和管理CCE Ingress。
本文档主要包含以下内容:
1.部署CCE Ingress Controller
2.创建Deployment与Service
3.创建CCE Ingress
注意:一个CCE Ingress只能使用一个BLB,一个BLB也只能被一个CCE Ingress使用
部署CCE Ingress Controller
CCE Ingress使用百度智能云负载均衡产品(BLB)实现,亦称为BLB类型Ingress。
CCE Ingress的使用需要集群中部署CCE Ingress Controller组件。
CCE不会为集群默认安装Ingress Controller,用户可在组件管理中安装该组件。
- 进入集群控制台“组件管理>网络”,找到
CCE Ingress Controller
组件。 - 点击『安装』并确认。
- 等待
CCE Ingress Controller
组件显示 "当前版本",表示该组件安装成功。
创建示例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
创建Ingress对象
使用以下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的路径要求很严格注意“/”。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
cce.ingress.blb-backup-content: ""
kubernetes.io/cce.ingress.blb-cert-id: ""
kubernetes.io/cce.ingress.blb-id: ""
kubernetes.io/cce.ingress.eip: ""
kubernetes.io/cce.ingress.http-redirect: "false"
kubernetes.io/cce.ingress.https: "false"
kubernetes.io/cce.ingress.internal: "false"
kubernetes.io/cce.ingress.timeout-in-seconds: "30"
kubernetes.io/cce.ingress.vpc-subnet-id: ""
kubernetes.io/ingress.class: cce
name: helloworld
namespace: default
spec:
rules:
- host: www.cce-ingress.com
http:
paths:
- backend:
service:
name: hello-service
port:
number: 8000
path: /hello/
- backend:
service:
name: world-service
port:
number: 9000
path: /world/
下文描述了创建CCE Ingress时,需要注意的事项。
Ingress Class
CCE Ingress Controller仅处理带有kubernetes.io/ingress.class: cce
注释的Ingress,请确保Ingress带有该Annnotation。
HTTPS规则设置
CCE Ingress Controller默认将Ingress资源的规则创建为HTTP规则,不会为其配置HTTPS规则,如果要将某些规则配置为HTTPS规则,应该具有以下Annotation:
-
指定BLB使用的证书。
kubernetes.io/cce.ingress.blb-cert-id: cert-id
-
显式声明开启HTTPS。
kubernetes.io/cce.ingress.https: "true"
-
指明使用HTTPS的规则。如果Spec中的某些规则需要使用HTTPS,还需要添加到该Annotation中。
kubernetes.io/cce.ingress.https-rules: >- [ { "host":"ad.com", "http":{ "paths":[ {"path":"/*","backend":{"serviceName":"service-example","servicePort":80}} ] } } ]
完整的Annotation使用说明参考:BLB Ingress Annotation说明。
访问测试
修改本地/etc/hosts,将www.cce-ingress.com指向EIP(例如: 106.12.52.80),可在控制台或者集群内查看Ingress信息:
# kubectl get ingress
NAME HOSTS ADDRESS PORTS AGE
helloworld www.cce-ingress.com 10.0.3.251,106.12.52.80 80 6m34s
访问测试: