前言

使用Harbor一般建议都加上Https,但是Https配置也是一个麻烦,这里主要记录一下如何快速通过cert-manager来自动签发证书。

环境

  • Kubernetes v1.10.11
  • Harbor v1.7.0
  • Nginx-ingress-controller v0.21.0
  • Helm v2.11.0
    这里Harbor采用helm chart的形式部署在k8s集群上。 nginx-ingress-controller采用Deployment+NodePort暴露80和443。 如果集群内NodePort端口限制了不能使用80和443,那么也可以采用DaemonSet+hostNetwork来进行负载均衡。

安装

k8s集群、nginx-ingress-controller还有helm的安装这里就不细说了,基本上是基础集群必有的。
推荐一个快速搭建部署的项目:kubeasz

安装Cert-Manager

直接从官方的chart仓库进行安装:

1
2
3
helm install --name cert-manager --namespace kube-system \
--set ingressShim.defaultIssuerName=letsencrypt-prod \
--set ingressShim.defaultIssuerKind=ClusterIssuer stable/cert-manager

这里指定自动签发 letsencrypt-prodIssuer,并且默认使用ClusterIsser

创建ClusterIssuer

创建文件:cluster-issuer.yaml,内容如下:

1
2
3
4
5
6
7
8
9
10
11
apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: lusyoe@163.com
privateKeySecretRef:
name: letsencrypt-prod
http01: {}

应用

kubectl apply -f cluster-issuer.yaml

这样Cert-Manager就已经安装配置好了。

安装Harbor

下载官方项目源码:https://github.com/goharbor/harbor-helm/releases
master分支是开发分支,建议下载1.0.0的Release源码。

修改values.yaml
源码下载好后,修改项目目录中的values.yaml文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
expose:
type: ingress
tls:
enabled: true
# 这里可以随意填写一个,cert-manager会自动创建并挂载
secretName: "harbor-secret-tls"
notarySecretName: "notary-secret-tls"
commonName: ""
ingress:
hosts:
core: harbor.lusyoe.com
notary: notary.lusyoe.com
annotations:
ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
ingress.kubernetes.io/proxy-body-size: "0"
nginx.ingress.kubernetes.io/proxy-body-size: "0"
# 这里添加自动创建tls,并使用的issuer
kubernetes.io/tls-acme: "true"
certmanager.k8s.io/issuer: letsencrypt-prod

安装

这里没有修改其他的配置,正式的生产环境最好还是要做数据持久化配置的哦。
其中包含了很多的组件,也可以适当的启用和禁用。
进入到harbor源码目录,执行以下命令进行安装:
helm install --name harbor .

通过cert-manager自动签发的证书,将会挂载到pod的/var/run/secrets/kubernetes.io/serviceaccount/ca.crt

后记

最后我们就可以通过浏览器访问:https://harbor.lusyoe.com 就可以了。
后面有空再介绍使用手动自签的证书完成Harbor的Https。