Flux 是一套开放且可扩展的 Kubernetes 持续和渐进式交付解决方案
安装部署
本文档使用GitHub存储源文件,如果是使用自搭建git服务器,可以参考官方安装文档:fluxcd.io/flux/instal…
export GITHUB_TOKEN=<user-token>
export GITHUB_USER=<user>
本地安装flux cli
brew install fluxcd/tap/flux
或者
curl -s https://fluxcd.io/install.sh | sudo bash
通过flux bootstrap 将Flux安装到Kubernetes集群
aws eks环境下的安装
在eksctl的安装文件cluster.yaml下增加如下内容:
gitops:
flux:
gitProvider: github
flags:
owner: "<github-owner>"
repository: "<github-repository>"
private: "true"
branch: "master"
namespace: "flux-system"
path: "<github-repository-path>"
执行
eksctl enable flux --config-file cluster.yaml
aliyun ack环境下的安装
flux bootstrap github \
--owner=<github-owner> \
--repository=<github-repository> \
--path=<github-repository-path> \
--personal
验证
执行kubectl -n flux-system get all
对应的git path目录下也生成如下文件
Secret加密
Flux在HelmRelease的部署上可使用kubeseal对secret进行加解密,在Kustomization的部署上可使用SOPS对secret进行加解密。
SOPS加密
注: age加密遵循与PGP相应的工作流程,是 OpenPGP 的一个简单、现代的替代方案。
- 安装
brew install age
- 生成age key
mkdir age && cd age
age-keygen > <xxxx>.agekey
chmod 600 <xxxx>.agekey
获取key
cat <xxxx>.agekey
export SOPS_AGE_RECIPIENTS=<key>
export SOPS_AGE_KEY_FILE=./<xxxx>.agekey
- 创建sops-age secret
cat <xxxx>.agekey | kubectl create secret generic sops-age \
--namespace=flux-system \
--from-file=<xxxx>.agekey=/dev/stdin
- 配置Kustomization使用sops-age,在文件flux-system/gotk-sync.yaml增加如下内容并提交到git。
prune: true
decryption:
provider: sops
secretRef:
name: sops-age
- 加密文件
sops --encrypt --encrypted-regex '^(data)$' github-token.yaml > github-token-enc.yaml
-
将加密的文件提交到flux
cp github-token-enc.yaml ./../flux-system/
git add github-token-enc.yaml
git commit -m "add github-token-enc.yaml"
git push
kubeseal加密
- 安装
brew install kubeseal
- 集群内部署sealed-secrets
flux create source helm sealed-secrets \
--interval=1h \
--url=https://bitnami-labs.github.io/sealed-secrets
flux create helmrelease sealed-secrets \
--interval=1h \
--release-name=sealed-secrets-controller \
--target-namespace=flux-system \
--source=HelmRepository/sealed-secrets \
--chart=sealed-secrets \
--chart-version=">=1.15.0-0" \
--crds=CreateReplace
- 导出public
kubeseal --fetch-cert \
--controller-name=sealed-secrets-controller \
--controller-namespace=flux-system \
> pub-sealed-secrets.pem
- 原始文件
例如:创建database.txt
url=jdbc:mysql://xxxx?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
username=xx
password=xx
生成原始secret文件
kubectl create secret generic design-service-database --from-env-file ./database.txt -n <namespace> --dry-run=client -o yaml database.yaml
- 加密文件
kubeseal --format=yaml --cert=pub-sealed-secrets.pem < database.yaml > database-sealed.yaml
- 查看并复制加密数据