服务端
1 | # 安装nfs服务 |
客户端
1 | # 安装nfs |
编辑fstab 配置自动挂载
1 | sudo vim /etc/fstab |
卸载
1 | sudo umount [local_mount_point] |
需要认证参考为 Linux 客户端设置具有基于 Kerberos 的身份验证的 NFS 服务器 (linux-console.net)
1 | # 安装nfs服务 |
1 | # 安装nfs |
编辑fstab 配置自动挂载
1 | sudo vim /etc/fstab |
卸载
1 | sudo umount [local_mount_point] |
需要认证参考为 Linux 客户端设置具有基于 Kerberos 的身份验证的 NFS 服务器 (linux-console.net)
本地路径映射(HostPath)
HostPath 卷存在许多安全风险,最佳做法是尽可能避免使用 HostPath。 当必须使用 HostPath 卷时,它的范围应仅限于所需的文件或目录,并以只读方式挂载。
1 | apiVersion: v1 |
支持的 type
值如下:
取值 | 行为 |
---|---|
空字符串(默认)用于向后兼容,这意味着在安装 hostPath 卷之前不会执行任何检查。 | |
DirectoryOrCreate |
如果在给定路径上什么都不存在,那么将根据需要创建空目录,权限设置为 0755,具有与 kubelet 相同的组和属主信息。 |
Directory |
在给定路径上必须存在的目录。 |
FileOrCreate |
如果在给定路径上什么都不存在,那么将在那里根据需要创建空文件,权限设置为 0644,具有与 kubelet 相同的组和所有权。 |
File |
在给定路径上必须存在的文件。 |
Socket |
在给定路径上必须存在的 UNIX 套接字。 |
CharDevice |
在给定路径上必须存在的字符设备。 |
BlockDevice |
在给定路径上必须存在的块设备。 |
1 | apiVersion: storage.k8s.io/v1 |
local
local
卷只能用作静态创建的持久卷。不支持动态配置。与
hostPath
卷相比,local
卷能够以持久和可移植的方式使用,而无需手动将 Pod 调度到节点。系统通过查看 PersistentVolume 的节点亲和性配置,就能了解卷的节点约束。
使用 local
卷时,你需要设置 PersistentVolume 对象的 nodeAffinity
字段。 Kubernetes 调度器使用 PersistentVolume 的 nodeAffinity
信息来将使用 local
卷的 Pod 调度到正确的节点。
PersistentVolume 对象的 volumeMode
字段可被设置为 “Block” (而不是默认值 “Filesystem”),以将 local
卷作为原始块设备暴露出来。
1 | apiVersion: v1 |
NFS映射
1 |
Minio
1 |
Ceph
1 |
[[Others/OpenSSL生成自签名证书|OpenSSL生成自签名证书]]
[[Kubernetes/K3s证书管理|K3s证书管理]]
1 | helm show values harbor/harbor > harbor-values.yaml |
harbor-value.yaml
1 | expose: |
harbor-ingress.yaml
1 | apiVersion: traefik.containo.us/v1alpha1 |
1 | # 添加Harbor仓库 |
1 | kubectl edit configmap harobr-registry -n harbor |
参考
Kubernetes ≥ 1.25 Containerd配置Harbor私有镜像仓库_containerd登录镜像仓库-CSDN博客
结合Cert-Manager完成Harbor的Https证书自动签发 | 风格 | 风起于青萍之末 (lusyoe.github.io)
Containerd容器镜像管理-腾讯云开发者社区-腾讯云 (tencent.com)
通过helm在k8s上搭建Harbor - 简书 (jianshu.com)
Kubernetes 集群仓库 harbor Helm3 部署-腾讯云开发者社区-腾讯云 (tencent.com)
1 | helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/ |
1 | kubectl -n kubernetes-dashboard edit service kubernetes-dashboard-web |
1 | # Please edit the object below. Lines beginning with a '#' will be ignored, |
创建证书请求文件dashboard-cert-manager.yaml
1 | apiVersion: cert-manager.io/v1 |
此配置文件是测试版,正式版参考K3s部署cert-manager
1 | kubectl apply -f dashboard-cert-manager.yaml |
新建dashboard-admin.yaml
1 | # 创建ServiceAccount |
新建用户
1 | # 部署用户资源 |
获取token
1 | # v1.24+ |
最新版本只支持Helm,旧版本v2.7支持Kubectl部署
1 | kubectl apply -f recommended.yaml |
修改recommended.yaml
1 | ... |
dashboard的默认webui证书是自动生成的,由于时间和名称存在问题,导致谷歌和ie浏览器无法打开登录界面,经过测试Firefox可以正常打开。解决证书问题参考Kubernetes Dashboard的安装与坑 - 简书 (jianshu.com)
1 | --- |
生成证书文件 tls.crt,tls.csr,tls.key
1 | # 生成key |
subj子参数解释
缩写 | 翻译 | 英文对照 |
---|---|---|
C | 国家名称缩写 | Country Name (2 letter code) |
ST | 州或省名称 | State or Province Name (full name) |
L | 城市或区域称 | Locality Name (eg, city) |
O | 组织名(或公司名) | Organization Name (eg, company) |
OU | 组织单位名称(或部门名) | Organizational Unit Name (eg, section) |
CN | 服务器域名/证书拥有者名称 | Common Name (e.g. server FQDN or YOUR name) |
emailAddress | 邮件地址 |
参考
k3s集群单节点部署与集群内DashBoard部署 - 知乎 (zhihu.com)
k3s集群搭建并安装kubernetes-dashboard - 东峰叵,com - 博客园 (cnblogs.com)
[K8S 快速入门(十九)通过Helm 安装 Kubernetes Dashboard_helm安装dashboard ingress-CSDN博客](https://blog.csdn.net/weixin_41947378/article/details/111661539#:~:text=通过Helm 安装 Kubernetes Dashboard 1 1. 下载 %23,外网访问 %23 将svc的ClusterIP改为NotePort,外网访问 … 5 5. 令牌方式登录仪表盘)
使用 traefik ingress暴露kubernetes-dashbord - HTTPS版本_svclb-traefik-CSDN博客
1 | https://pypi.tuna.tsinghua.edu.cn/simple |
查看当前镜像地址
1 | pip config list |
1 | pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple |
1 | pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple |
1 | pip config unset global.index-url |
1 | # 导出根证书 |
导出Secret
1 | kubectl get secret example-secret -o yaml > example-secret.yaml |
导出内容格式如下
1 | apiVersion: v1 |
Base64解码
1 | # cert |
配置文件
添加helm库
1 | # 添加库 |
配置 values.yaml
1 | auth: |
部署
1 | helm install -f values.yaml redis bitnami/redis --namespace --create-namespace |
参考
kubernetes环境部署单节点redis - 紫色飞猪 - 博客园 (cnblogs.com)
参考
[[Others/OpenSSL生成自签名证书|OpenSSL生成自签名证书]]
1 | kubectl create secrets tls example-io-tls --key example.io.key --cert example.io.crt |
手动管理证书可忽略下边的安装过程,跳转到证书配置
方式一: 使用Helm部署(推荐)
1 | # 添加镜像源 |
方式二: 使用kubectl部署
1 | # Kubernetes 1.16+ |
Issuer 与 ClusterIssuer 的区别是 ClusterIssuer 可跨命名空间使用,而 Issuer 需在每个命名空间下配置后才可使用。这里我们使用 ClusterIssuer,其类型选择 Let‘s Encrypt。
正式环境速率限制(每个注册域名可签发的证书数量(每周 50 份)),使用测试环境测试一切正常后再切换正式环境。
letsencrypt-issuer-staging.yaml
1 | apiVersion: cert-manager.io/v1 |
letsencrypt-issuer-prod
1 | apiVersion: cert-manager.io/v1 |
说明:
metadata.name 创建的签发机构的名称,创建证书的时候会引用
spec.acme.email 邮箱,证书快过期的时候会有邮件提醒,不过cert-manager会利用acme协议自动给我们重新颁发证书来续期
spec.acme.server acme 协议的服务端,由官方给出
spec.acme.privateKeySecretRef 指示此签发机构的私钥将要存储到哪个Secret对象中
spec.acme.solvers.http01 指示签发机构使用HTTP-01的方式进行acme协议 (还可以用DNS方式,acme协议的目的是证明这台机器和域名都是属于你的,然后才准许给你颁发证书)
selfsigned-issuer.yaml
1 | apiVersion: cert-manager.io/v1 |
spec.subjects.organizations:
example-io-tls.yaml
1 | apiVersion: cert-manager.io/v1 |
生产环境使用建议
实际生产环境中使用cert-manager可以考虑以下建议:
Secret
及Issuer
放在某个独立的命名空间中,与其它业务的命名空间隔离起来。Issuer
,要记得定期更新根CA证书。Letsencrypt
类型的Issuer
,目前支持两种方式验证域名的所有权,基于DNS记录的验证方案和基于文件的HTTP验证方案。cert-manager
还提供ingress-shim
方式,自动为Ingress
资源生成证书,只需要在Ingress
资源上打上一些标签即可,详细可参考这里。spec.secretName 指示证书最终存到哪个 Secret 中
spec.issuerRef.kind 值为 ClusterIssuer 说明签发机构不在本 namespace 下,而是在全局
spec.issuerRef.name 我们创建的签发机构的名称 (ClusterIssuer.metadata.name)
spec.duration 证书过期时间
spec.renewBefore 在过期前自动更新
spec.dnsNames 指示该证书的可以用于哪些域名
spec.acme.config.http01.domains 指示该证书的可以用于哪些域名
获取CA证书,root-ca.crt,k3s导出证书 参考K3s导出证书
k8s中使用cert-manager玩转证书-腾讯云开发者社区-腾讯云 (tencent.com)
k8s 使用cert-manager证书管理自签-CSDN博客
k8s部署cert-manager实现证书自动化_cert-manager.yaml-CSDN博客
Cert-Manager 实现 K8s 服务域名证书自动化续签 - 知乎 (zhihu.com)
手把手教你使用 cert-manager 签发免费证书 - 腾讯云原生 - 博客园 (cnblogs.com)
在 k3s 内使用 cert-manager 管理证书 (bowser1704.github.io)
用 k3s 轻松管理 SSL 证书 | Linux 中国 - 知乎
k8s中级篇-cert-manager+Let‘s Encrypt自动证书签发_cert-manager let’s encrypt-CSDN博客
k3s 使用 Letsencrypt 和 Traefik 完成 https 入口部署-腾讯云开发者社区-腾讯云 (tencent.com)
容器服务 使用 cert-manager 签发免费证书-实践教程-文档中心-腾讯云 (tencent.com)
使用cert-manager为Traefik IngressRoute自动签发Let’s Encrypt证书 – 桃又的技术笔记 (taoyouh.cn)
内网证书
cert-manager管理内网k8s开发环境证书 - hueidou163 - 博客园 (cnblogs.com)
SelfSigned - cert-manager (k8s-docs.github.io)
k8s 使用cert-manager证书管理自签-CSDN博客
Kubernetes (K8S) 中Traefik自动申请证书-腾讯云开发者社区-腾讯云 (tencent.com)
k8s ingress配置自签名证书,并解决Kubernetes Ingress Controller Fake Certificate-CSDN博客
清华 https://mirrors.tuna.tsinghua.edu.cn
腾讯 https://mirrors.tencent.com
华为 https://mirrors.huaweicloud.com
中国科技大学 https://mirrors.ustc.edu.cn
华中科技大学 http://mirror.hust.edu.cn
网易 http://hub-mirror.c.163.com
中国科技大学 https://docker.mirrors.ustc.edu.cn (不可用)
道客 https://docker.m.daocloud.cn (参考官方文档)
腾讯 https://mirror.ccs.tencentyun.com
华为 https://mirror.swr.myhuaweicloud.com
阿里云 https://registry.cn-hangzhou.aliyuncs.com
[^注]: 阿里可申请私有加速,需注册账号,注册后地址修改为 https://{私有ID}.mirror.aliyuncs.com。详细信息参考官方文档
阿里 https://registry.aliyuncs.com/google_containers
中科大 https://gcr.mirrors.ustc.edu.cn (2022.8之后不再更新镜像,校外访问返回403)
华为 https://mirror.swr.myhuaweicloud.com
道客 https://m.daocloud.io/k8s.gcr.io 文档
道客 https://m.daocloud.io/quay.io 参考支持镜像列表
道客 https://m.daocloud.io/ghcr.io 参考支持镜像列表
ArtifactHub https://artifacthub.io/
华为 https://mirrors.huaweicloud.com/helm/
bitnami https://charts.bitnami.com/bitnami
Google https://gcr.io/kubernetes-helm
Docker(/etc/docker/daemon.json )
1 | { |
Containerd(/etc/containerd/config.toml)
1 |
|
K3s中Containerd容器(/var/lib/rancher/k3s/agent/etc/containerd/config.toml)
K3s 默认的 containerd 配置文件目录为/var/lib/rancher/k3s/agent/etc/containerd/config.toml,但直接操作 containerd 的配置文件去设置镜像仓库或加速器相比于操作 docker 要复杂许多。K3s 为了简化配置 containerd 镜像仓库的复杂度,K3s 会在启动时检查/etc/rancher/k3s/中是否存在 文件,如果存在该文件,就会根据 registries.yaml 的内容转换为 containerd 的配置并存储到/var/lib/rancher/k3s/agent/etc/containerd/config.toml,从而降低了配置 containerd 镜像仓库的复杂度。
1 | mirrors: |
containerd 与 docker 都有默认仓库,并且都为 docker.io
。如果配置中未指定 mirror 为 docker.io
,重启 containerd 后会自动加载 docker.io
配置。与 docker 不同的是,containerd 可以修改 docker.io
对应的 endpoint( 默认为 https://registry-1.docker.io ),而 docker 无法修改。
docker 中可以通过 registry-mirrors
设置镜像加速地址。如果 pull 的镜像不带仓库地址(项目名+镜像名:tag
),则会从默认镜像仓库去拉取镜像。如果配置了镜像加速地址,会先访问镜像加速仓库,如果没有返回数据,再访问默认吧镜像仓库。
k3s完整配置文件
1 | mirrors: |
镜像转换
1 |
|
转换为gcr.io镜像
1 | docker pull registry.aliyuncs.com/google_containers/coredns:1.6.5 |
K8S批量下载docker images
1 | kubeadm config images list |
1 |
|
更新版
1 |
|
或(V1.3以上)
1 | kubeadm init --image-repository registry.aliyuncs.com/google_containers \ |