做电商网站需要注册什么公司,做国外网站衣服码数要怎么写,商业网站教程,百度注册Secret 和 ConfigMap 资源对象是命名空间级别的。它们只能被同一命名空间中的 Pod 引用。所以有时候不得不手动为每个命名空间创建它们。但有很多场景#xff0c;我们想让它们是全局的#xff0c;至少可以是跨命名空间共享的 Secret 和 ConfigMap#xff0c;例如这些场景我们想让它们是全局的至少可以是跨命名空间共享的 Secret 和 ConfigMap例如这些场景所有命名空间都有相同的私有注册表避免为每个命名空间创建相同的 SecretKubeshere 中 Devops 项目中的 harbor 凭证、源代码仓库的凭证如何自动化的在跨命名空间甚至跨 Kubernetes 集群之间“同步”这些配置有很多方法。本文就此用例讨论并用凭证在 Kubesphere Devops 项目之间同步做示例。可选的方案脚本使用 jq实现简单的同步kubectl get secret cure-for-covid-19 -n china -o json \| jq del(.metadata[namespace,creationTimestamp,resourceVersion,selfLink,uid]) \| kubectl apply -n rest-of-world -f -用 sed 实现简单的同步kubectl get secret cure-for-covid-19 -n china -o json \| jq del(.metadata[namespace,creationTimestamp,resourceVersion,selfLink,uid]) \| kubectl apply -n rest-of-world -f -上面这两种可定制化不强还是手动方式。ClusterSecret要跨命名空间自动共享或同步 Secret可以使用 Python 开发的 ClusterSecret Operatorhttps://github.com/zakkg3/ClusterSecretClusterSecret Operator 通过 ClusterSecret CRD 去管理。确保所有匹配的包括新创建的) 命名空间都有可用的 Secret。ClusterSecret 上的任何更改都会更新所有相关的 Secret。删除 ClusterSecret 也会删除所有克隆的 Secret。kubernetes-reflectorC#开发的 Kubernetes 反射器https://github.com/EmberStack/kubernetes-reflector它将存储在 Secret 中的凭据或证书自动传播到所有命名空间并保持同步修改源会更新所有副本。该扩展允许您通过注释自动复制和保持跨命名空间的 Secret在源 Secret 上添加注释annotations:reflector.v1.k8s.emberstack.com/reflection-auto-enabled: true这将在所有命名空间中创建密钥的副本。您可以使用以下方法限制创建副本的命名空间reflector.v1.k8s.emberstack.com/reflection-allowed-namespaces: namespace-1,namespace-2,namespace-[0-9]*不足Kubernetes-reflector 和 ClusterSecret 已经很强大但还是美中不足。ClusterSecret 不支持 ConfigMaps 的同步和跨集群的同步只是简单的通过 matchNamespace和 avoidNamespaces 实现模糊的匹配和不匹配。Kubernetes-reflector 不支持跨集群同步也是通过正则表达式实现了目标命名空间的模糊匹配。就项目的 README来看二者都不支持 label 选择 namespace用户在 Kubesphere 上创建 Devops 项目不可能永远遵循模糊匹配表达式。Config Syncer以前的名称为 Kubedhttps://github.com/kubeops/config-syncerConfig Syncer 可以 保持 ConfigMaps 和 Secrets 在命名空间和集群之间同步。使用 Go 语言开发官方文档也比较细致。参考官方文档安装https://appscode.com/products/kubed/v0.12.0/setup/install/安装 config-syncer添加 Helm 仓库和更新仓库$ helm repo add appscode https://charts.appscode.com/stable/
$ helm repo update搜索可用的最新安装包# helm search repo appscode/kubed --version v0.13.2
NAME CHART VERSION APP VERSION DESCRIPTION
appscode/kubed v0.13.2 v0.13.2 Config Syncer by AppsCode - Kubernetes daemon拉取到本地并解压helm fetch appscode/kubed --version v0.13.2
tar -zxf kubed-v0.13.2.tgz
cd kubed/修改 values.yamlconfig:# Set cluster-name to something meaningful to you, say, prod, prod-us-east, qa, etc.# so that you can distinguish notifications sent by kubedclusterName: dev# If set, configmaps and secrets from only this namespace will be syncedconfigSourceNamespace: # kubeconfig file content for configmap and secret syncerkubeconfigContent: 这里的 config.clusterName 默认为 unicorn如果不修改kubed 同步之后的资源对象的 label 上会为 kubed.appscode.com/origin.cluster: unicorn所以出于规范考虑建议集群名设置为真实的集群名。如果 kubed 只在本集群内同步就不需要填写 kubeconfigContent 了。执行安装$ helm install config-sync -f values.yaml -n kubed --create-namespace .
NAME: config-sync
LAST DEPLOYED: Fri May 20 19:43:00 2022
NAMESPACE: kubed
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
To verify that Config Syncer has started, run:kubectl get deployment --namespace kubed -l app.kubernetes.io/namekubed,app.kubernetes.io/instanceconfig-sync查看 Pod 启动是否成功$ kubectl get pod --namespace kubed -l app.kubernetes.io/namekubed,app.kubernetes.io/instanceconfig-sync
NAME READY STATUS RESTARTS AGE
config-sync-kubed-8687c98ffb-ldsvz 1/1 Running 0 3m50s$ kubectl get deployment --namespace kubed -l app.kubernetes.io/namekubed,app.kubernetes.io/instanceconfig-sync
NAME READY UP-TO-DATE AVAILABLE AGE
config-sync-kubed 1/1 1 1 3m53s在 Kubesphere 中实践Kubeshere Devops 项目中的 harbor 凭证、源代码仓库的凭证有时候每个项目都是一样的所以没必要每次创建 Devops 项目都去手动创建凭证一切都变的自动化才是正道。Kyverno 规则需要提前创建一个 Kyverno 规则创建这个的目的下面会做说明。cat EOF | kubectl apply -f -
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:generation: 10name: mutate-credential-secret
spec:background: truefailurePolicy: Failrules:- exclude:resources:namespaces:- kubesphere-devops-systemgenerate:clone: {}match:resources:kinds:- Secretselector:matchLabels:kubed.appscode.com/origin.namespace: kubesphere-devops-systemmutate:patchStrategicMerge:metadata:labels:participant: kyvernofinalizers:- finalizers.kubesphere.io/credentialtype: credential.devops.kubesphere.io/basic-authname: mutate-credential-secret
EOF可以参考 Kyverno 官方文档 sample-examplehttps://kyverno.io/docs/writing-policies/match-exclude/#resource-filters源 Secret我们将kubesphere-devops-system命名空间中的凭证作为同步的来源cat EOF | kubectl apply -f -
kind: Secret
apiVersion: v1
metadata:name: common-encodenamespace: kubesphere-devops-systemlabels:app: common-encodeannotations:kubed.appscode.com/sync: kubesphere.io/devopsprojectkubesphere.io/creator: adminkubesphere.io/description: 密码经过UrlEncode
data:id: XXpassword: XXusername: XX
type: will-be-modify-by-kyverno
---
kind: Secret
apiVersion: v1
metadata:name: commonnamespace: kubesphere-devops-systemlabels:app: commonannotations:kubed.appscode.com/sync: kubesphere.io/devopsprojectkubesphere.io/creator: adminkubesphere.io/description: 公用账户
data:password: XXusername: XX
type: will-be-modify-by-kyverno
EOF参考 kubed 官方文档https://appscode.com/products/kubed/v0.12.0/guides/config-syncer/intra-cluster/源 Secret 必须指定注解kubed.appscode.com/sync: kubesphere.io/devopsproject表明目标命名空间中必须包含label key为kubesphere.io/devopsprojectKubesphere的Devops项目默认包含这个label key。需要说明的是Kubesphere 根据 Secret 的 type 字段前缀有credential.devops.kubesphere.io/就会处理。为了避免 kubesphere-devops-system 下的源 Secret 被 ks-controller-manager 同步。所以源 Secret 的 type 不可为type: credential.devops.kubesphere.io/basic-auth源 Secret type 可以自定义一个type: will-be-modify-by-kyverno通过 kyverno 修改为type: credential.devops.kubesphere.io/basic-auth目标命名空间下面这个 Devops 项目作为命名空间k get ns -l kubesphere.io/devopsproject
NAME STATUS AGE
test-ns1xxx Active 133d同步结果创建之后就在存在 label key为kubesphere.io/devopsproject的 namespace 下创建了同名 Secret$ k get secret -A | grep common
kubesphere-devops-system common will-be-modify-by-kyverno 2 29s
kubesphere-devops-system common-encode will-be-modify-by-kyverno 3 13m
test-ns1xxx common credential.devops.kubesphere.io/basic-auth 2 28s
test-ns1xxx common-encode credential.devops.kubesphere.io/basic-auth 3 13m同步之后kubed 会加一些 labelskubed.appscode.com/origin.clusterkubed.appscode.com/origin.namekubed.appscode.com/origin.namespace和 annotationskubed.appscode.com/originapiVersion: v1data:id: XXpassword: XXusername: XXkind: Secretmetadata:annotations:kubed.appscode.com/origin: {namespace:kubesphere-devops-system,name:common-encode,uid:a649bc60-0197-4ec2-914b-b6412d2c7d29,resourceVersion:589340738}labels:app: common-encodekubed.appscode.com/origin.cluster: unicornkubed.appscode.com/origin.name: common-encodekubed.appscode.com/origin.namespace: kubesphere-devops-systemname: common-encodenamespace: des-nstype: will-be-modify-by-kyverno而且会将同步源 Secret 中设置的注解去掉kubed.appscode.com/sync: kubesphere.io/devopsproject总结Kubed 可以跨 Kubernetes 命名空间、跨集群同步 ConfigMaps/Secrets。而且暴露了各种监控指标可以满足大多数配置同步场景。- END -后台回复“加群”带你进入高手交流群推荐阅读还怕记不住 Kubectl 命令K9s 太强大了Kubernetes 微服务最佳实践Kubernetes Pod 删除操作源码解析使用 Lux 下载B站视频真强大38 万K8s API 服务暴露在公网上可能被攻击大规模 K8s 集群性能瓶颈和调优实践优雅的跨 Namespace 同步 Secret 和 ConfigMapKruise 轻松让 K8S 应用实现渐进式交付图解 Kubernetes Pod 如何获取 IP 地址使用 Telepresence 轻松在本地调试 k8s 应用程序GitOps 工具选型33 款工具任你挑就在刚刚 k8s 1.24 正式发布来看功能总览Nomad 会替代 Kubernetes 吗两者如何选择Docker 入门终极指南详细版漫画轻松看懂如何用 Kubernetes 实现 CI/CD阿里开源的低代码引擎已收获 4.5K 星星新手必须知道的 Kubernetes 架构Kubernetes 架构核心点详细总结全网粉丝20W的头部大号专注云原生、Golang、Linux实用脚本效率工具免费CSDN下载回复【go】获取近 6 万 Star 的资源回复【1024】获取全种类IT资料回复【红包封面】获取超好看封面回复【加群】进入高手如云技术交流群分享、点赞和在看支持我们分享更多好文章谢谢 点个在看集群永保稳定