kubenetes使用ConfigMap挂载ssh公钥实现pod免密

一、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 && \
    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 节点暴露的端口访问

你可能感兴趣的:(docker,kubernetes,Dockerfile,运维,ssh,容器)