在 4.1.1 版本中,ks-core chart 新增如下配置项,支持将外部 ingress 相关信息传递给扩展组件,以支持在扩展组件 chart 中创建和使用 ingress:
extension:
ingress:
# 外部 ingress 的 ingressClassName
ingressClassName: ""
# 用于创建扩展组件访问入口的域名后缀。根据外部 ingress 地址,它可以是 LB 主机名地址(比如 xx.com)、{node_ip}.nip.io 或内部 DNS 地址(比如 kse.local)。
domainSuffix: ""
# ingress 的 http 端口
httpPort: 80
# ingress 的 https 端口
httpsPort: 443
通过上面的配置,扩展组件 chart 中将会被自动注入如下值,可直接使用:
global.extension.ingress.ingressClassName
global.extension.ingress.domainSuffix
global.extension.ingress.httpPort
global.extension.ingress.httpsPort
下面是一个示例,为一个扩展组件的 API 接口分配一个子域名以供外部访问。
前提条件是环境存在可使用的任意 ingress controller,在示例环境中使用了 nginx ingress controller,并且 LB 分配了一个域名 xx.com,根据这些信息更新 ks-core:
helm upgrade ... --set extension.ingress.ingressClassName=nginx --set extension.ingress.domainSuffix=xx.com
扩展组件增加 ingress 配置项以及一些使用 ingress 的其它代码更改(如有必要):
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: xx-api
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: {{ .Values.global.extension.ingress.ingressClassName }}
rules:
- host: xxapi.{{ .Values.global.extension.ingress.domainSuffix }}
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: xx-api-backend
port:
number: 80
打包、更新/升级扩展组件之后即可使用 xxapi.xx.com
来访问 API,上述示例中将流量转发到了扩展组件自身的一个 service 上,如需要转发到一个外部地址,可使用 ExternalName
类型的 service,示例如下:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: ExternalName
externalName: my.database.example.com
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: xx-api
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: {{ .Values.global.extension.ingress.ingressClassName }}
rules:
- host: xxapi.{{ .Values.global.extension.ingress.domainSuffix }}
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: my-service
port:
number: 80