一、ConfigMap介绍
ConfigMap是一个Kubernetes资源,允许您将配置数据与应用程序代码分开存储。它提供了一种将配置设置与应用程序本身分离的方法,从而可以更轻松地管理和更新配置,而无需修改应用程序的代码或容器镜像。
ConfigMap通常用于存储键值对或配置文件。它可以通过使用YAML文件的声明性方法或通过 Kubernetes API 创建。创建后,ConfigMap 可以作为卷挂载,也可以作为容器化应用程序中的环境变量公开
二、使用ConfigMap挂载ssh公钥实现pod免密
[root@k8s-work01 ~]# ssh-keygen #客户端生成公钥
[root@k8s-work01 ~]# scp /root/.ssh/id_rsa.pub root@masterIP:/公钥存放路径/
[root@k8s-master ~]# kubectl create configmap ssh-config --from-file=id_rsa.pub -n ssh #创建configmap
三、Dockerfile制作ssh免密镜像
FROM centos:centos7.9.2009
# 安装openssh-server
RUN yum install -y epel-release
RUN yum install -y openssh-server openssh-clients cronie && \
ssh-keygen -A
#设置 root 用户密码
RUN echo "root:root" | chpasswd
# SSH登录设置允许 root 用户
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config && \
mkdir -p /root/.ssh && \
chmod 700 /root/.ssh
# 暴露 SSH 端口
EXPOSE 22
# 容器启动时启动SSH服务
CMD ["/usr/sbin/sshd", "-D"]
四、创建deployment,service。使得
apiVersion: apps/v1
kind: Deployment
metadata:
name: ssh-deployment
namespace: ssh
labels:
app: ssh
spec:
selector:
matchLabels:
app: ssh
template:
metadata:
labels:
app: ssh
spec:
nodeSelector:
kubernetes.io/hostname: k8s-master #节点标签选择调度
hostname: sshd #主机名
containers:
- name: ssh
image: ssh:v1
ports:
- containerPort: 22
volumeMounts:
- name: ssh-config
mountPath: /root/.ssh/authorized_keys #精确到文件
subPath: id_rsa.pub #精确到文件
volumes:
- name: ssh-config
configMap:
name: ssh-config
---
apiVersion: v1
kind: Service
metadata:
name: ssh-svc
namespace: ssh
spec:
selector:
app: ssh ###关联容器标签
ports:
- protocol: TCP
port: 22 ###容器端口
nodePort: 30080 ###nodeport映射为30080端口,便于外部主机访问
type: NodePort ###svc类型为nodeport
k8s集群可通过pod IP访问
kubectl get pods -n ssh -o wide #查看pod IP
ssh root@10.244.235.239 #集群内节点通过pod IP访问
ssh root@192.168.200.10 -p30009 #集群外节点通过pod 节点暴露的端口访问