云产品部署到集群后,首先需要通过 service 和 ingress 定义云产品的路由,再通过 ECP 规范定义云产品的菜单数据和访问权限,在登录ECP后,符合权限的账户就可以通过上导访问到对应的云产品了。
云产品Service
说明
Service 是 k8s 中的抽象概念, 定义了一组 Pods 的逻辑集合和一个用于访问它们的策略。云产品 Chart 中可能存在多个Service来暴露不同的服务,可采用service-[功能].yaml 的命名方式来进行区分。
示例
以下示例中,mycloud-product 通过 service-product-api.yaml 定义了一个 my-cloud-product-api service 用于暴露后端 api 服务。
apiVersion: v1
kind: Service
metadata:
name: my-cloud-product-api
spec:
ports:
- name: http-api
port: 80
protocol: TCP
targetPort: {{ .Values.conf.container_port }}
selector:
app: mycloudproduct
type: ClusterIP
云产品Ingress
说明
Ingress 是 k8s 定义 service 向外暴露的路由,可采用 ingress-[功能].yaml
的命名方式来进行区分。为了隔离各个云产品的路由,云产品的Ingress需要有一个统一的云产品路径前缀,如示例中的 path: /my-cloud-product
,访问此云产品的 api 时,都会携带 /my-cloud-product
的路由。
注意
只需要给 dashboard 和提供界面服务的 pod 添加 ingress.kubernetes.io/custom-http-errors: 404,500,xxx 的注释。API 服务不需要添加 custom http errors,否则异常信息会被 nginx 拦截,导致无法快速定位问题。
示例
以下示例中,mycloud-product 定义了两个ingress用于配置前端和后端的路由。通过 ingress-product-api.yaml 定义了一个 my-cloud-product-api ingress 用于配置后端 api 服务的路由。
ingress-product-dashboard.sh
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-cloud-product-dashboard
annotations:
kubernetes.io/ingress.class: "nginx"
ingress.kubernetes.io/force-ssl-redirect: "true"
ingress.kubernetes.io/custom-http-errors: 404,500
spec:
rules:
- http:
paths:
- path: /my-cloud-product/dashboard/
backend:
serviceName: my-cloud-product-dashboard
servicePort: http-dashboard
ingress-product-api.sh
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-cloud-product-api
annotations:
kubernetes.io/ingress.class: "nginx"
ingress.kubernetes.io/force-ssl-redirect: "true"
spec:
rules:
- http:
paths:
- path: /my-cloud-product/api/
backend:
serviceName: my-cloud-product-api
servicePort: http-api
云产品自定义导航分类
说明
云产品的导航需要属于一个导航的分类,如果导航需要加入到一个已有的分类中,可跳过此章节,直接在云产品导航文件中声明已有的分类名。如果新增自定义导航的分类,则需要在 templates/_category.yaml
进行定义,涉及如下参数:
分类名(e.g.:mycloud-product):云产品自定义分类名
id(e.g.:mycloud-product):需要和名称一致。
dynamicNumber:动态排序保留字段,可以为任意数字。
示例
如下
_category.yaml
文件示例中,定义了如下两个导航:mycloud-product-a
- id: mycloud-product-a
- icon: mycloud-product-a
- 中文名:云产品-a
- 英文名:mycloud-product-a
mycloud-product-b
- id: mycloud-product-b
- icon: mycloud-product-b
- 中文名:云产品-b
- 英文名:mycloud-product-b
mycloud-product-a: id: mycloud-product-a icon: mycloud-product-a name: en: mycloud-product-a zh-cn: 云产品-a navigations: [] dynamicNumber: 1 mycloud-product-b: id: mycloud-product-b icon: mycloud-product-b name: en: mycloud-product-b zh-cn: 云产品-b navigations: [] dynamicNumber: 1
云产品导航
说明
云产品 chart 包中,templates/_navigation.yaml
用于定义,涉及参数如下:
catagory
:默认导航分类name
:云产品中英文翻译nav
:左导航name
:导航中英文翻译icon
:导航 iconorder
:导航顺序url
:导航 URLbaseURI
:导航基础路由available
:导航可见性wizard
:是否有向导数据catagory
:导航分类(可选,若无此字段,则会添加到默认导航分类中)
sub_nav
:左导航二级菜单(可选,属性参见nav
)。top_nav
:上导航数据。(可选,属性参见nav
,如果不设置,则将把nav
的所有数据显示在上导航中,如果显示的过程中nav
中有sub_nav
的话,则会把sub_nav
的第一个 url 取出用于显示)示例
如下 _navigation.yaml 的示例中,此云产品向 security 身份与访问管理 分类下注册了两个导航:
角色
策略
network 网络 分类下注册了一个导航:
- 应用身份管理
category: security name: en: Identity & Access Management zh-cn: 身份与访问管理 nav: role: proId: role name: zh-cn: 角色 en: Role url: /iam/roles icon: role classify: identity baseURI: /iam/ order: 4 available: true wizard: false policy: proId: policy name: zh-cn: 策略 en: Policy url: /iam/policies icon: policy classify: identity baseURI: /iam/ order: 5 available: true wizard: false applications: proId: applications category: network name: zh-cn: 应用身份管理 en: Application Identity Management url: /iam/applications icon: application classify: identity baseURI: /iam/ order: 6 available: true wizard: false
导航访问策略
说明
云产品导航的访问策略在templates/_navigation_policy.yaml
文件中进行定义,开发者可对不同角色的用户赋予不同的访问权限,例如某些高级管理页面设置仅云管理员可访问。设置访问策略的粒度包括top_nav
,nav
、sub_nav
字段下的所有url。如不填写,则默认所有角色均无权限访问此url,对所有类型账户都不可见。
当前仅支持使用四种默认角色:
- cloud_admin:云管理员,可管理云环境的所有资源。
- domian_admin:部门管理员,可管理所属部门下的所有资源。
- admin:项目管理员,可管理所属项目下的所有资源。
- member:普通用户,管理自己拥有的所有资源。
示例
/mycloud-product/mycloud-product-1: - cloud_admin - domain_admin - admin - member /mycloud-product/mycloud-product-2: - member /mycloud-product/mycloud-product-sub-feature: - member
云产品使用向导
说明
开发者可以在templates/_wizard.yaml
文件中 nav
属性下对 cloud_admin,domian_admin,admin,member 定义使用向导,当用户安装或升级云产品后首次访问云产品时,将在界面展示账户对应权限的云产品使用向导,使用户能够掌握云产品新特性,快速上手。涉及参数如下:
order
:新特性顺序proId
:云产品的上导航idtitle
:新特性中英文翻译wizard
:向导内容列表content
:当前向导页标题中英文翻译pics
:当前向导页中英文图片示例
展示效果:nav: cloud_admin: mycloud_product_overview: order: 1 proId: mycloud_product_overview title: en: mycloud-product zh-cn: 我的云产品 wizard: - content: en: English description zh-cn: 中文功能描述 pics: en: wizard/wizard_en.png zh-cn: wizard/wizard_zh_cn.png - content: en: 英文功能描述 zh-cn: 中文功能描述。 pics: en: wizard/admin_overview_en.png zh-cn: wizard/admin_overview_zh_cn.png mycloud_product_apps: order: 2 proId: mycloud_product_apps title: en: mycloud_product_apps zh-cn: 云主机应用 wizard: - content: en: 英文功能描述 zh-cn: 中文功能描述。 pics: en: wizard/admin_instance_1_en.png zh-cn: wizard/admin_instance_1_zh_cn.png - content: en: 英文功能描述 zh-cn: 中文功能描述。 pics: en: wizard/admin_instance_2_en.png zh-cn: wizard/admin_instance_2_zh_cn.png