ConfigMap是一个Kubernetes资源,允许您将配置数据与应用程序代码分开存储。它提供了一种将配置设置与应用程序本身分离的方法,从而可以更轻松地管理和更新配置,而无需修改应用程序的代码或容器镜像。
ConfigMap通常用于存储键值对或配置文件。它可以通过使用YAML文件的声明性方法或通过 Kubernetes API 创建。创建后,ConfigMap 可以作为卷挂载,也可以作为容器化应用程序中的环境变量公开
[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
FROM centos:centos7.9.2009
# 安装openssh-server
RUN yum install -y epel-release
RUN yum install -y openssh-server && \
mkdir /var/run/sshd
# 为SSH免密登录设置SSH key
RUN echo "root:root" | chpasswd
RUN rm -f /etc/ssh/ssh_host_rsa_key && \
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' && \
rm -f /etc/ssh/ssh_host_dsa_key && \
ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N '' && \
rm -f /etc/ssh/ssh_host_ecdsa_key && \
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N '' && \
rm -f /etc/ssh/ssh_host_ed25519_key && \
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ''
# SSH登录设置
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# 容器启动时启动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
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 [email protected] #集群内节点通过pod IP访问
ssh [email protected] -p30009 #集群外节点通过pod 节点暴露的端口访问