背景介绍
基于腾讯云或BYO(Bring Your Own)集群安装Mendix Operator后,在没有单独enable TLS的情况下,新建环境(environment)部署Mendix App应用后,默认TLS是没有打开的,也就是只能通过http的方式来访问应用,用户在自己单独购买证书或申请免费证书后需要在应用的环境中配置TLS。本文将介绍如何在集群中安装配置cert-manager组建来自动免费获取证书,不需要额外在应用中配置TLS。
准备工作
本文操作的前提如下:
- 在腾讯云中创建有TKE Kubernetes Cluster,或者其它类型的Cluster。也可以是在其它云提供商的BYO cluster。主要是基于Mendix Operator方式部署应用。
- 有集群的管理权限。
安装环境的准备,本文将以腾讯云TKE 集群为例进行操作。
- 运行环境需要kubectl和helm命令行工具,相关下载地址请自行百度。
- 进入腾讯云容器服务控制台,找到Mendix Cluster集群->基本信息,打开外网访问,并设置放行kubectl所在运行环境的IP地址。
- 下载或者拷贝Kubeconfig内容到kubectl运行机器的.kube 文件夹,命名文件为config。具体也可以参考集群基本信息页面底部的帮助信息:通过Kubectl连接Kubernetes集群操作说明。
- 执行$ kubectl get ns,如果能得到相应命名空间信息,说明运行环境和网络是正确的。
安装cert-manager
安装cert-manager有多种方式,比如kubectl命令,还有helm命令安装。本人测试用的是helm方式,应该都是OK的。
- kubectl方式安装
$ kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.6.1/cert-manager.yaml
- helm方式安装
$ helm repo add jetstack https://charts.jetstack.io
$ helm repo update
$ helm install \
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--version v1.6.1 \
--set installCRDs=true
验证是否已成功安装cert-manager。如果执行命令看所有的pod都已经Running了,表示已成功安装并执行。
$ kubectl get pods -n cert-manager
NAME READY STATUS RESTARTS AGE
cert-manager-5c6866597-zw7kh 1/1 Running 0 2m
cert-manager-cainjector-577f6d9fd7-tr77l 1/1 Running 0 2m
cert-manager-webhook-787858fcdb-nlzsq 1/1 Running 0 2m
安装let's encrypt Issuer
下一步是安装ClusterIssuer,有些文档介绍一般是用Issuer Kind。但是Issuer 类型一般是针对具体的namespace,而ClusterIssuer可以针对整个cluster有效。
$ cat issuer.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: letsencrypt
solvers:
- http01:
ingress:
class: nginx
$ kubectl apply -f issuer.yaml
更改Mendix Operator Config
完成了以上步骤后,需要更新一下Mendix Operator Configurations。如果集群有几个namespace,每个namespace都需要单独更改。例子中用的是test namespace,请更改为跟集群一致的namespace名字,比如dev,qa,prod。
注意把域名domain改成自己的域名。其它的黑色加粗部分都要检查并做相应的改动。前2行是annotations,后面3行是ingress的设置,要注意缩格。
$ kubectl edit operatorconfigurations.privatecloud.mendix.com mendix-operator-configuration -ntest
endpoint:
ingress:
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: 500m
cert-manager.io/cluster-issuer: letsencrypt
kubernetes.io/ingress.class: nginx
domain: mendix.kyleliu.top
enableTLS: true
tlsSecretName: '{{.Name}}-tls'
path: /
type: ingress
测试使用
在做了以上的所有步骤后,就可以进行测试了。进入平台https://apps.mendix.tencent-cloud.com,找到自己的Mendix App,点DEPLOY下的Environments,Add Environment后,过一会儿就可以看到域名自动就是https的了,等待app启动后就可以用https来进行安全访问了。看TLS设置时,配置为Apply Default Configuration。
参考资料
- https://cert-manager.io/docs/
- https://letsencrypt.org/docs/challenge-types/#dns-01-challenge
- https://kubernetes.github.io/ingress-nginx/user-guide/tls/
暂无数据