Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

444
Visualizações
¿Cómo ejecutar comandos kubectl dentro de un contenedor?

En un contenedor dentro de un pod, ¿cómo puedo ejecutar un comando usando kubectl? Por ejemplo, si necesito hacer algo como esto dentro de un contenedor:

kubectl obtener vainas

He intentado esto: en mi dockerfile, tengo estos comandos:

 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

EDITAR: estaba probando el archivo OSX, lo he corregido al archivo binario de Linux. (corregido por @svenwltr

Al crear el archivo docker, esto es exitoso, pero cuando ejecuto kubectl get pods dentro de un contenedor,

 kubectl get pods

me sale este error:

La conexión al servidor: fue rechazada. ¿Especificó el host o puerto correcto?

Cuando estaba implementando localmente, me encontraba con este error si mi máquina acoplable no se estaba ejecutando, pero dentro de un contenedor, ¿cómo se puede ejecutar una máquina acoplable?

Localmente, soluciono este error ejecutando los siguientes comandos: (dev es el nombre de la máquina acoplable)

 docker-machine env dev eval $(docker-machine env dev)

¿Puede alguien decirme qué es lo que tengo que hacer?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Usaría kubernetes api, solo necesita instalar curl, en lugar de kubectl y el resto es tranquilo.

 curl http://localhost:8080/api/v1/namespaces/default/pods

Estoy ejecutando por encima del comando en uno de mis servidores ap. Cambie el host local a la dirección IP del servidor ap/nombre dns .

Dependiendo de su configuración, es posible que deba usar SSL o proporcionar un certificado de cliente.

Para encontrar puntos finales de api, puede usar --v=8 con kubectl .

ejemplo:

 kubectl get pods --v=8

Recursos:

Documentación de la API de Kubernetes

Actualización para RBAC:

Supongo que ya configuró rbac, creó una cuenta de servicio para su pod y la usó. Esta cuenta de servicio debe tener permisos de lista en los pods en el espacio de nombres requerido. Para hacer eso, debe crear un rol y un enlace de rol para esa cuenta de servicio.

Cada contenedor en un clúster se llena con un token que se puede usar para autenticarse en el servidor API. Para verificar, dentro del contenedor ejecute:

 cat /var/run/secrets/kubernetes.io/serviceaccount/token

Para realizar una solicitud a apserver, dentro del contenedor ejecute:

 curl -ik \ -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" \ https://kubernetes.default.svc.cluster.local/api/v1/namespaces/default/pods
over 4 years ago · Santiago Trujillo Relatório

0

Un poco tarde para la fiesta aquí, pero estos son mis dos centavos:

Descubrí que usar kubectl dentro de un contenedor es mucho más fácil que llamar a la API del clúster

(¿Por qué? ¡Autenticación automática!)

Supongamos que está implementando un proyecto de Node.js que necesita el uso kubectl .

  1. Descargar y kubectl dentro del contenedor
  2. Cree su aplicación, copiando kubectl a su contenedor
  3. ¡Voila! kubectl proporciona un cli enriquecido para administrar su clúster de kubernetes

Documentación útil

--- EDICIONES ---

Después de trabajar con kubectl en mis módulos de clúster, encontré una forma más eficaz de autenticar los módulos para poder realizar llamadas a la API k8s. Este método proporciona una autenticación más estricta.

  1. Cree una cuenta de servicio para su ServiceAccount y configure su pod para usar dicha cuenta. Documentos de la cuenta de servicio k8s
  2. Configure un RoleBinding o ClusterRoleBinding para permitir que los servicios tengan la autorización para comunicarse con la API de k8s. Documentos de vinculación de roles de k8s
  3. Llame a la API directamente o use un cliente k8s para administrar las llamadas a la API por usted. Recomiendo encarecidamente usar el cliente, tiene una configuración automática para pods que elimina el paso del token de autenticación requerido con las solicitudes normales.

Cuando haya terminado, tendrá lo siguiente: ServiceAccount , ClusterRoleBinding , Deployment (sus pods)

Siéntase libre de comentar si necesita una dirección más clara, intentaré ayudar tanto como pueda :)

Ejemplo todo incluido

 apiVersion: extensions/v1beta1 kind: Deployment metadata: name: k8s-101 spec: replicas: 3 template: metadata: labels: app: k8s-101 spec: serviceAccountName: k8s-101-role containers: - name: k8s-101 imagePullPolicy: Always image: salathielgenese/k8s-101 ports: - name: app containerPort: 3000 --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: k8s-101-role subjects: - kind: ServiceAccount name: k8s-101-role namespace: default roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io --- apiVersion: v1 kind: ServiceAccount metadata: name: k8s-101-role

La salathielgenese/k8s-101 contiene kubectl . Entonces, uno puede simplemente iniciar sesión en un contenedor de pod y ejecutar kubectl como si lo estuviera ejecutando en el host k8s: kubectl exec -it pod-container-id -- kubectl get pods

over 4 years ago · Santiago Trujillo Relatório

0

Primera pregunta

/usr/local/bin/kubectl: cannot execute binary file

Parece que descargó el binario OSX para kubectl . Cuando se ejecuta en Docker, probablemente necesite el de Linux:

 https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl

Segunda pregunta

Si ejecuta kubectl en un clúster de Kubernetes configurado correctamente, debería poder conectarse al servidor ap.

kubectl básicamente usa este código para encontrar el servidor ap y autenticar: github.com/kubernetes/client-go/rest.InClusterConfig

Esto significa:

  • El host y el puerto del servidor ap se almacenan en las variables de entorno KUBERNETES_SERVICE_HOST y KUBERNETES_SERVICE_PORT .
  • El token de acceso se monta en var/run/secrets/kubernetes.io/serviceaccount/token .
  • El certificado del servidor está montado en /var/run/secrets/kubernetes.io/serviceaccount/ca.crt .

Estos son todos los datos que kubectl necesita saber para conectarse al servidor ap.

Algunas ideas de por qué esto podría no funcionar:

  • El contenedor no se ejecuta en Kubernetes.
    • No es suficiente usar el mismo host de Docker; el contenedor debe ejecutarse como parte de una definición de pod.
  • El acceso está restringido mediante el uso de un complemento de autorización (que no es el predeterminado).
  • Las credenciales de la cuenta de servicio se sobrescriben con la definición del pod ( spec.serviceAccountName ).
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda