0%

ConfigMap简介, 为什么设计ConfigMap

在k8s中, ConfigMap是一种API对象, 用于将非机密的配置数据存储到键值对中。
Configmap作用是, 把配置数据从应用代码中分隔开, 让镜像和配置文件解耦,实现了镜像的可移植性。

举例:
我有一个Squid(正向代理)的Pod, 需要获取用户配置的白名单做访问控制。 每个用户设置的白名单都不一样, 而且用户可以随时对白名单做增、删、改,所以这个白名单的配置不能写死在代码里。
可以把白名单配置存储到k8s的ConfigMap, 这样配置数据和镜像就实现了解耦,Pod中可以动态地获取白名单的配置。

如何使用ConfigMap

使用ConfigMap时, Pod可以将其用作环境变量、命令行参数或存储卷中的配置文件。
下面给出一个具体的案例,将ConfigMap用作存储卷中的配置文件,Pod中通过读取配置文件的内容,就获取到了配置信息。

阅读全文 »

前言

k8s中的Pod由容器组成,容器运行的时候可能因为意外情况挂掉。为了保证服务的稳定性,在容器出现问题后能进行重启,k8s提供了3种探针

k8s的三种探针

为了探测容器状态,k8s提供了两个探针: LivenessProbe和ReadinessProbe

  • LivenessProbe 存活性探针, 如果探测失败, 就根据Pod重启策略,判断是否要重启容器。
  • ReadinessProbe 就绪性探针,如果检测失败,将Pod的IP:Port从对应endpoint列表中删除,防止流量转发到不可用Pod上

对于启动非常慢的应用, LivenessProbe和ReadinessProbe可能会一直检测失败,这会导致容器不停地重启。 所以k8s设计了第三种探针StartupProbe解决这个问题

  • StartupProbe探针会阻塞LivenessProbe和ReadinessProbe, 直到满足StartupProbe(Pod完成启动),再启用LivenessProbe和ReadinessProbe
阅读全文 »

配置Nginx自签名SSL证书的流程

  • 生成一个SSL自签名证书
  • 客户端机器信任这个自签名证书
  • 修改RHEL服务器的Nginx配置
  • 在客户机用curl测试HTTPS

生成一个SSL自签名证书

在RHEL服务器上, 用openssl命令生成一个自签名证书

1
2
openssl genrsa -out server.key 2048 #生成一个2048位的RSA私钥,保存到server.key
openssl req -x509 -new -nodes -key server.key -sha256 -days 3650 -out server.crt -subj "/C=CN/CN=www.petertest.com/O=MyRootCA" # 使用私钥server.key, 生成一个自签名的根证书server.crt, 有效期10年

注: CN=www.petertest.com需要换成你的服务器域名, 否则curl测试会报错

阅读全文 »

需求

在公司局域网部署的Squid代理服务器,和局域网中其他电脑一样无法访问外网。 需要给Squid配置一个父级的HTTP代理,这个父代理能访问外网,这样Squid就具备了访问外网的能力。

基础知识

Squid提供了cache_peer指令, 以定义邻居cache, 并告知Squid如何与邻居通信。
邻居cache有两种关系: 父子或姐妹

  • 父子cache, 可用于配置父代理来请求内容。
  • 邻居cache, 用于提供额外的cache命中,提升性能。 例如某些请求cache丢失,在邻居cache有可能命中,这样比从原始服务器请求速度要快。
阅读全文 »

ACL简介

Squid ACL(Access Control List,访问控制列表)提供了代理控制的功能。
通过设置ACL,Squid可以针对源地址、目标地址、访问的URL路径、访问的时间等各种条件进行过滤,从而实现对网络流量的精细控制。

基本的ACL元素语法:

1
acl name type value1 value2 ...

可以对一个ACL元素列举多个值,也可以多个ACL行使用同一个名字。例如,以下两种配置方式是等价的

1
acl safe_ports port 80 443 8080

等价于

1
2
3
acl safe_ports port 80
acl safe_ports port 443
acl safe_ports port 8080
阅读全文 »

问题描述

客户在windows CMD中SSH连接失败,报错:

1
2
Corrupted MAC on input
ssh_dispatch_run_fatal: Connection to x.x.x.x port 22: message authentication code incorrect

值得注意的是,客户通过别的机器做SSH连接可以成功,使用putty, mobaxterm连接也可以成功

原因分析

通过别的机器能做SSH连接,说明SSH服务端本身没有问题,网络连接也正常。
这个原因一般是SSH客户端和服务器的配置不匹配,使用了不同的MAC(消息认证码)或cipher(加密算法),导致协商失败。

定位思路

分别查看SSH客户端和服务端支持的MAC和cipher列表,先确认配置是否匹配。

阅读全文 »

HTTP basic认证是一种简单的认证机制,要求用户在请求资源前提供有效的用户名和密码。

实例: 给Squid代理添加HTTP basic认证

要求: 只允许用户名为peter,密码为123的请求通过认证, 其他请求返回407(Proxy认证失败)

步骤

1 使用htpasswd工具,生成用户名密码。 例如这里添加用户名peter, 密码123.

1
2
3
4
5
yum install httpd-tools
htpasswd -c /etc/squid/squid_user peter
New password: 123
Re-type new password: 123
Adding password for user peter

检查密码文件/etc/squid/squid_user,可以找到刚才添加的用户peter

1
2
cat /etc/squid/squid_user
peter:$XXXXXXXXXXXXXXXXXXX
阅读全文 »

前言

学习如何在k8s中部署Squid, 过程如下:

  • 先在Docker环境中运行Squid, 准备好Squid镜像。
  • 再搭建一个k8s环境,把上一步的docker镜像传进来,再创建对应k8s资源,完成Squid的部署

准备环境

准备两台Linux VM:

  • 一台Centos/RHEL/RockyLinux 7/8/9,安装Docker, 构建Squid的Docker镜像
  • 一台RockyLinux 9, 用于运行k8s, 部署Squid

1. 在Docker环境中运行Squid, 准备Squid镜像

安装Docker

参考: 安装Docker

阅读全文 »

环境

说明: 其他k8s(例如: k3s, kubernetes)创建Pod的方法和Microk8s没啥区别,可以参考本文

目标

创建一个Nginx的Pod,映射宿主机30000端口到Pod容器的80端口;客户端能通过宿主机30000端口访问Pod容器中的Nginx服务

步骤

阅读全文 »