автоматизация входа в систему для акс в ansible под - PullRequest
0 голосов
/ 28 мая

У меня есть модуль ansible, в котором есть плейбуки и python скрипты для управления нашим кластером k8s. У меня есть этот манифест для ansible, а также мой файл dockerfile:

apiVersion: v1 
kind: Pod 
metadata:   
  name: ansible 
spec:   
  volumes:
    - name: ansible-data
      persistentVolumeClaim:
        claimName: ansible-data   
  containers:
    - name: ansible
      image: foo.azurecr.io/foo:latest
      command: [ "/bin/bash", "-c", "--" ]
      args: [ "while true; do sleep 30; done;" ]
      volumeMounts:
        - mountPath: /scripts
          name: ansible-data   
  restartPolicy: Never

---

apiVersion: v1 
kind: PersistentVolumeClaim 
metadata:   
  name: ansible-data 
spec:   
  accessModes:
    - ReadWriteOnce   
  resources: 
    requests:
      storage: 1Gi

, а вот мой файл dockerfile для ansible image

FROM ubuntu:16.04

RUN apt-get update && apt-get install -y --no-install-recommends \
    python3.5 \
    python3-pip \
    python3-setuptools \
    curl \
    sudo \
    nano \
    && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*
RUN pip3 install --upgrade pip
RUN pip3 install ansible
RUN pip3 install openshift
RUN pip3 install clickhouse-driver
RUN pip3 install jmespath
RUN ansible-galaxy collection install community.kubernetes
RUN curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
RUN chmod +x ./kubectl
RUN sudo mv ./kubectl /usr/local/bin/kubectl
# Define working directory.
WORKDIR /

# Define default command.
CMD ["bash"]

Я хочу сделать этот модуль может использоваться для каждого кластера в экосистеме нашей компании, поэтому, когда я хочу использовать этот модуль, мне нужно войти в систему azure aks и получить контекст моего кластера aks, вот что я делаю после входа в систему ansible pod

az login -u foo@company.com
password:

и после входа в систему я получаю контекст с:

az aks get-credentials --resource-group foo --name fooCluster

Я хочу автоматизировать эти две команды, указав пароль с помощью секрета k8s и команду контекста с помощью configmap?

Должен ли я сделать это на уровне манифеста модуля или уровне файла докеров изображения?

И следует ли мне использовать контейнер init или sidecar для ввода секрета и configmap, независимо от того, используется ли механизм args / env?

Спасибо!

1 Ответ

0 голосов
/ 04 июня

вот ответ, чего я пытаюсь достичь

apiVersion: v1
kind: Pod
metadata:
  name: ansible
spec:
  volumes:
    - name: ansible-data
      persistentVolumeClaim:
        claimName: ansible-data
  containers:
    - name: ansible
      image: foo.azurecr.io/foo:latest
      env:
        - name: SECRET_USERNAME
          valueFrom:
            secretKeyRef:
              name: az-user-pass
              key: username
        - name: SECRET_PASSWORD
          valueFrom:
            secretKeyRef:
              name: az-user-pass
              key: password
        - name: SECRET_RESOURCEGROUP
          valueFrom:
            secretKeyRef:
              name: az-resourcegroup-aksname
              key: resourcegroup
        - name: SECRET_AKSNAME
          valueFrom:
            secretKeyRef:
              name: az-resourcegroup-aksname
              key: aksname
      command: [ "/bin/bash", "-c"]
      args: [ "az login -u $SECRET_USERNAME -p $SECRET_PASSWORD; az aks get-credentials --resource-group $SECRET_RESOURCEGROUP --name $SECRET_AKSNAME; while true; do sleep 30; done;" ]
      volumeMounts:
        - mountPath: /scripts
          name: ansible-data
  restartPolicy: Never

---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ansible-data
spec:
  accessModes:
  - ReadWriteOnce
  resources: 
    requests:
      storage: 1Gi
...