长亭雷池使用过程中

出现以下两种情况:

1、因规则配置,导致两次安全访问被拦截,尝试多种方法无法恢复访问,最终重新安装防火墙,浪费掉了一定的时间与精力
2、配置拦截规则后,规则拦截异常,以下为情况规则描述
异常规则.png

  拦截情况

拦截情况.png

为了预防这种情况的发生,可实行以下应急方案:

1、`/date`下的`safeline`进行定期备份,此文件夹下的配置文件是长亭雷池防火墙当时的状态,可以理解为一个快照
2、长亭雷池默认端口9443,以上方案生效时可以放开防火墙,实现`IP:9443`访问

在进行测试过程中,规范行为:

1、测试范围中`指定host`,影响最小化
2、发布黑名单之前进行`密码验证`,`完毕后`进行发布黑名单
3、配置`白名单`,针对指定IP组和域名的双重访问条件,使得访问颗粒最小化
测试请不要针对维护模式下的网站测试,维护模式各种规则均不生效

PermitRootLogin prohibit-password 是一个在 SSH 服务器配置(通常是 /etc/ssh/sshd_config 文件)中的指令,用于控制对 SSH 服务器的 root 用户访问。

具体来说,这个指令的含义是:

PermitRootLogin:这是控制是否允许 root 用户通过 SSH 登录的参数。
prohibit-password:这个值表示 root 用户可以通过 SSH 密钥对(public/private key pair)登录,但不可以使用密码登录。

换句话说,当设置为 PermitRootLogin prohibit-password 时,root 用户可以通过 SSH 使用其私钥进行身份验证并登录,但不能使用密码进行登录。

这样的设置是为了提高安全性,因为使用 SSH 密钥对登录通常比使用密码更安全。

如果你想要完全禁止 root 用户通过 SSH 登录,你可以将 PermitRootLogin 设置为 no,而如果你想要允许 root 用户使用密码或密钥对登录,你可以将其设置为 yes(但请注意,这通常被认为是一个不太安全的选择)。

下载的容器镜像

docker save -o /opt/portainer.tar portainer/portainer-ce(镜像名称)
scp portainer.tar root@192.168.1.13:/opt/

导出镜像:在源环境中运行以下命令,将镜像导出为文件。

docker save -o image.tar image_name

导入镜像:将导出的镜像文件传输到目标环境,并在目标环境中运行以下命令,将镜像导入。

docker load -i image.tar


Docker容器数据卷迁移:

容器的数据卷可以存储容器中的数据。如果需要迁移包含数据卷的容器,可以使用以下步骤:

创建数据卷容器:在源环境中创建一个仅用于数据卷的容器。

docker create -v /data --name data_container busybox

将数据卷挂载到源容器:在源容器中使用 --volumes-from选项将数据卷容器挂载到源容器。

docker run -d --volumes-from data_container --name source_container image_name

迁移数据卷:将数据卷容器的数据目录复制到目标环境。

创建目标容器:在目标环境中创建一个仅用于数据卷的容器。

docker create -v /data --name data_container busybox

将数据卷挂载到目标容器:在目标容器中使用 `--volumes-from`选项将数据卷容器挂载到目标容器。

docker run -d --volumes-from data_container --name target_container image_name


L X C 容器添加特权

lxc.apparmor.profile = unconfined

报错内容

docker run -ti ubuntu:latest /bin/bash
docker: Error response from daemon: AppArmor enabled on system but the docker-default profile could not be loaded: running `/usr/sbin/apparmor_parser apparmor_parser -Kr /var/lib/docker/tmp/docker-default752380479` failed with output: apparmor_parser: Unable to replace "docker-default".  Permission denied; attempted to load a profile while confined?

error: exit status 243.
ERRO[0000] error waiting for container: context canceled

解决办法,简单粗暴

sudo apt-get remove apparmor

建议卸载因为这玩意一般情况下也用不到。

一、Certbot 简介

是Let's Encrypt官方推荐的获取证书的客户端,可以帮我们获取免费的Let's Encrypt 证书。Certbot 是支持所有 Unix 内核的操作系统的。

sudo yum install snapd               #安装 snapd
sudo snap install --classic certbot  #使用snapd安装 Certbot
sudo ln -s /var/lib/snapd/snap /snap #创建软链接保证命令

二、申请证书

执行证书生成命令,去云服务商后台增加一条dns,并将certbot生成的参数填写到dns配置的相关位置

certbot certonly -d *.lius.fun --manual --preferred-challenges dns
  • certonly 表示安装模式,Certbot 有安装模式和验证模式两种类型的插件
  • -d 为那些主机申请证书,如果是通配符,输入 *.example.com
  • --manual 表示手动安装插件,Certbot 有很多插件,不同的插件都可以申请证书,用户可以根据需要自行选择
  • --preferred-challenges dns 使用 DNS 方式校验域名所有权

[button color="light" icon="" url="https://letsencrypt.org/docs/challenge-types/#http-01-challenge" type=""]其他挑战方式[/button]

三、自动申请

Let’s Encrypt 证书将在 90 天后到期。我们建议您自动更新证书。此处,我们将一个 cron 作业添加到现有 crontab 文件中,以执行这一操作。

  1. 打开 crontab 文件
$ crontab -e
  1. 添加certbot命令,并设置为每天运行。在本例中,我们每天中午运行该命令。该命令检查服务器上的证书是否会在未来 30 天内到期,如果是,则更新证书
0 12 * * * /usr/bin/certbot renew --quiet

[scode type="share"]-quiet指令告知certbot不要生成输出[/scode]

四、手动申请

手动申请需要进行DNS挑战,请注意开启
cd /etc/letsencrypt/renewal
cat lius.fun.conf
certbot certonly --email gua3j7@126.com -d *.lius.fun --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory

更新系统[button color="light" icon="" url="https://www.lius.fun/13.html" type="round"]参考链接[/button]

修改hosts文件,添加以下内容

192.168.1.10 k8s-lius

取消swap分区

sed -ri 's/.*swap.*/#&/' /etc/fstab 

关闭selinux

setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

安装docker

curl https://releases.rancher.com/install-docker/20.10.sh | sh

不要使用最新的26,Rancher可能不兼容

安装Rancher

docker run -d --restart=unless-stopped -p 8080:80 -p 8443:443 -v /opt/rancher/data:/var/lib/rancher --privileged rancher/rancher:v2.6.9
# 找到密码
docker logs  ${container-id}  2>&1 | grep "Bootstrap Password:"


Rancher注册过程中查看配置日志

[INFO ] [ingress] removing admission batch jobs if they exist
[INFO ] [addons] Saving ConfigMap for addon rke-ingress-controller to Kubernetes
[INFO ] [addons] Successfully saved ConfigMap for addon rke-ingress-controller to Kubernetes
[INFO ] [addons] Executing deploy job rke-ingress-controller
[INFO ] [ingress] removing default backend service and deployment if they exist
[INFO ] [ingress] ingress controller nginx deployed successfully
[INFO ] [addons] Setting up user addons
[INFO ] [addons] no user addons defined
[INFO ] Finished building Kubernetes cluster successfully


注册完毕

查看注册情况
Rancher使用镜像.png
Rancher容器运行状态-1.png
Rancher容器运行状态-2.png


安装kutectl

#下载最新版本:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

    #验证二进制文件(可选)
    #下载 kubectl 校验和文件:
    curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
    
    #根据校验和文件验证 kubectl 二进制文件:
    echo "$(<kubectl.sha256) kubectl" | sha256sum --check
    如果有效,则输出为:
    kubectl: OK
    
    #安装 kubectl
    install -o root -g root -m 0755 kubectl /usr/bin/kubectl
    
    #测试以确保您安装的版本是最新的:
    kubectl version --client
    
    #将rancher集群中kubeconfig的内容复制到服务器config中
    mkdir -p $HOME/.kube
    vi $HOME/.kube/config    #粘贴复制的内容
    
    #测试kubectl
    kubectl get node

下载文件传入到主节点 $HOME/.kube/config


Rancher报错

[etcd] Failed to bring up Etcd Plane: etcd cluster is unhealthy: hosts [192.168.100.666] failed to report healthy. Check etcd container logs on each host for more information 

mstart节点执行

docker stop $(docker ps -aq)               #停止所有停止的容器
docker system prune -f                     #清理未使用的镜像
docker volume rm $(docker volume ls -q)    #删除所有数据卷
docker image rm $(docker image ls -q)      #删除所有镜像

[tag type="info"]镜像和数据卷非必要可以不用删除[/tag]

rm -rf /etc/ceph \
       /etc/cni \
       /etc/kubernetes \
       /opt/cni \
       /opt/rke \
       /run/secrets/kubernetes.io \
       /run/calico \
       /run/flannel \
       /var/lib/calico \
       /var/lib/etcd \
       /var/lib/cni \
       /var/lib/kubelet \
       /var/lib/rancher/rke/log \
       /var/log/containers \
       /var/log/pods \
       /var/run/calico

Rancher忘记密码

docker exec -ti <容器id> reset-password

Rancer报错

 新建集群后,一直显示无法 Waiting for API to be available,日志显示 [Disconnected] Cluster agent is not connected
  1. cattle-cluster-agent貌似使用宿主机的hosts制定,需要DNS解析才可以。我注册下游RKE2集群时碰到这个问题,后来添加外部DNS解决。
  2. RKE 的集群部署完成之后会通过 k8s_cluster-register_cattle-cluster-agent 这个容器 告诉Rancher服务已经部署完毕,但是这个容器的内部 HOSTS 没有配置我们Rancher服务的域名(集群和Rancher不在同一个网络),导致没有办法通信,一直无法注册成功。 我在这个容器内部 手动修改了 /etc/hosts 添加了我们的域名。