Flux的生产部署

480 阅读2分钟

Flux 是一套开放且可扩展的 Kubernetes 持续和渐进式交付解决方案

image.png

安装部署

本文档使用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

image.png

对应的git path目录下也生成如下文件

image.png

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
  • 查看并复制加密数据

image.png