Construindo imagens para seus apps

Uma imagem do Docker é a base para cada contêiner que você cria com o IBM Cloud® Kubernetes Service.

Uma imagem é criada por meio de um Dockerfile, que é um arquivo que contém instruções para construir a imagem. Um Dockerfile pode referenciar os artefatos de construção em suas instruções que são armazenadas separadamente, como um app, a configuração do app e suas dependências.

Implementando contêineres por meio de uma imagem do IBM Cloud Container Registry no namespace default do Kubernetes

É possível implementar contêineres em seu cluster por meio de uma imagem pública fornecida pela IBM ou de uma imagem privada que é armazenada em seu namespace do IBM Cloud Container Registry. Para obter mais informações sobre como seu cluster acessa imagens de registro, consulte Compreendendo como seu cluster está autorizado a fazer pull de imagens do IBM Cloud Container Registry.

Antes de Iniciar:

  1. Configure um namespace no IBM Cloud Container Registry e envie por push as imagens para esse namespace.

  2. Criar um cluster.

  3. Efetue login na sua conta. If applicable, target the appropriate resource group. Configure o contexto para o seu cluster.

  4. Crie um arquivo de configuração de implementação denominado <deployment>.yaml.

  5. Defina a implementação e a imagem a serem usadas de seu namespace no IBM Cloud Container Registry.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: <deployment>
    spec:
      replicas: <number_of_replicas>
      selector:
        matchLabels:
          app: <app_name>
      template:
        metadata:
          labels:
            app: <app_name>
        spec:
          containers:
          - name: <app_name>
            image: <region>.icr.io/<namespace>/<image>:<tag>
    
    <deployment>
    Dê um nome à sua implementação.
    <number_of_replicas>
    Insira o número de pods de réplica que a implementação cria.
    app: <app_name>
    Use o nome do seu app como um rótulo para o contêiner.
    name: <app_name>
    Dê um nome ao seu contêiner, como o nome do seu rótulo app.
    image: <region>.icr.io/namespace>/image>:tag>
    Substitua as variáveis da URL da imagem pelas informações para sua imagem:
    region>: o terminal de API do IBM Cloud Container Registry regional para o domínio de registro. Para listar o domínio para a região na qual você está com login efetuado, execute ibmcloud cr api.
    namespace>: O espaço de nomes de registro. Para obter suas informações de namespace, execute ibmcloud cr namespace-list.
    image>:tag>: A imagem e a tag que você deseja utilizar para o contêiner. Para listar as imagens que estão disponíveis em seu namespace de registro, execute ibmcloud cr images.
  6. Crie a implementação em seu cluster.

    kubectl apply -f <deployment>.yaml
    

Referindo-se à imagem pull secret em sua implementação pod

Se o administrador do cluster não armazenou o segredo de extração de imagem na conta de serviço do Kubernetes, todas as implementações que não especificarem uma conta de serviço não poderão usar o segredo de extração de imagem para implementar contêineres. Em vez disso, é possível definir um segredo de extração de imagem em sua implementação de pod. Quando você se refere ao segredo de extração de imagem em uma implementação de pod, o segredo de extração de imagem é válido somente para esse pod e não pode ser compartilhado entre os pods no espaço de nomes do Kubernetes.

Antes de Iniciar

Para referir-se ao segredo de extração de imagem na implementação de pod,

  1. Crie um arquivo de configuração de pod que seja denominado mypod.yaml.

  2. Defina o pod e o segredo de pull de imagem para acessar imagens no IBM Cloud Container Registry.

    Para acessar uma imagem privada,

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      containers:
        - name: <container_name>
          image: <region>.icr.io/<namespace_name>/<image_name>:<tag>
      imagePullSecrets:
        - name: <secret_name>
    

    Para acessar uma imagem pública da IBM Cloud,

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      containers:
        - name: <container_name>
          image: icr.io/<image_name>:<tag>
      imagePullSecrets:
        - name: <secret_name>
    
    container_name>
    O nome do contêiner a ser implementado em seu cluster. namespace_name>: O espaço de nomes de registro no qual a imagem é armazenada. Para listar os namespaces disponíveis, execute ibmcloud cr namespace-list. image_name>: O nome da imagem a ser utilizada. Para listar as imagens disponíveis em uma conta do IBM Cloud, execute ibmcloud cr image-list. tag>: A versão da imagem que você deseja utilizar. Se nenhuma tag for especificada, a imagem identificada como a mais recente será usada por padrão. <secret_name>: O nome do segredo de extração de imagem criado anteriormente.
  3. Salve as mudanças.

  4. Crie a implementação em seu cluster.

    kubectl apply -f mypod.yaml
    

Enviando por push imagens para o IBM Cloud Container Registry

Após o administrador do cluster configurar um registro de imagem com o IBM Cloud Container Registry, você pode armazenar de forma segura e compartilhar imagens do Docker com outras usuários adicionando imagens ao seu namespace.

Por exemplo, é possível que você puxe uma imagem de qualquer origem de registro privado ou público e, em seguida, identificá-la para uso posterior no IBM Cloud Container Registry. Ou é possível que você envie por push uma imagem do Docker com a qual você trabalha para o seu namespace para que outros usuários possam acessar a imagem. Para iniciar, consulte Incluindo imagens em seu namespace.

Gerenciando a segurança de imagens no IBM Cloud Container Registry com o Vulnerability Advisor

O Vulnerability Advisor verifica o status de segurança de imagens de contêiner que são fornecidas pela IBM, terceiros ou incluídas no namespace do IBM Cloud Container Registry da sua organização.

Quando você inclui uma imagem em um namespace, ela é automaticamente varrida pelo Vulnerability Advisor para detectar problemas de segurança e potenciais vulnerabilidades. Se problemas de segurança forem localizados, instruções serão fornecidas para ajudá-lo a corrigir a vulnerabilidade relatada. Para começar, consulte Gerenciando a segurança da imagem com o Vulnerability Advisor.

Configuração de conteúdo confiável para imagens de contêiner

É possível construir contêineres de imagens confiáveis assinadas e armazenadas no IBM Cloud Container Registry e evitar as implementações de imagens não assinadas ou vulneráveis.

  1. Conectar imagens para o conteúdo confiável. Depois de configurar a confiança para suas imagens, será possível gerenciar o conteúdo confiável e os assinantes que podem enviar imagens por push para seu registro.
  2. Para cumprir uma política para que somente imagens assinadas possam ser usadas para construir contêineres em seu cluster, instale o projeto Portieris de software livre.
  3. Os usuários do cluster podem implementar apps que são construídos por meio de imagens confiáveis.
    1. Implemente no namespace default do Kubernetes.
    2. Implemente a um espaço de nomes do Kubernetes diferente ou de uma região ou conta da IBM Cloud diferente.

Ativando o cumprimento de segurança da imagem em seu cluster

Ao ativar o cumprimento de segurança da imagem em seu cluster, você instala o projeto Portieris Kubernetes de software livre. Em seguida, é possível criar políticas de imagem para evitar que pods que não atendem às políticas, como imagens não assinadas, sejam executados no cluster.

Para obter mais informações, consulte a Documentação do Portieris.

Imagens mutantes: por padrão, o Portieris usa o controlador de admissão MutatingAdmissionWebhook para mutar sua imagem para referir-se à imagem por uma compilação em vez de uma tag. No entanto, você pode ter alguma tecnologia de implementação que rejeita uma imagem mutante. Nesse caso, é possível usar a opção de mutação de imagem e a política para mudar o comportamento padrão.

Ativando ou desativando o cumprimento de segurança da imagem

É possível ativar ou desativar o cumprimento de segurança de imagem para o cluster por meio da CLI ou do console. Para versões anteriores, consulte a Documentação do Portieris.

Ativando ou desativando a aplicação de segurança de imagem com a CLI

Consulte os comandos a seguir.

Ativando ou desativando a aplicação de segurança de imagem por meio do console

  1. No console, selecione seu cluster.
  2. Localize o campo Image security enforcement e clique em Enable (Ativar ) ou Disable (Desativar ).

Políticas de imagem padrão

Ao ativar o cumprimento de segurança da imagem, o IBM Cloud Kubernetes Service cria automaticamente algumas políticas de imagem em seu cluster. Ao desativar o recurso, o CRD ClusterImagePolicy subjacente é removido, o que remove todas as políticas de imagem padrão e quaisquer políticas de imagens customizadas que você criou.

  • As políticas de imagem com o nome ibm-signed-image-enforcement restringem as imagens que são executadas no namespace a somente imagens do IBM Cloud Kubernetes Service. Não modifique essas políticas de imagem. Quaisquer mudanças feitas são sobrescritas em alguns minutos.
  • Outras políticas de imagem, como default ou default-allow-all, permitem imagens que não são restritas por outra política de imagem. É possível modificar essas políticas de imagem e suas mudanças serão preservadas, mas não renomeie a política de imagem. Se você renomear a política, mais políticas com o nome e as configurações padrão serão criadas.

Para revisar as políticas de imagem no cluster,

Antes de Iniciar

Efetue login na sua conta. If applicable, target the appropriate resource group. Configure o contexto para o seu cluster.

  1. Liste as políticas de imagem que se aplicam globalmente ao cluster. Para obter uma configuração de exemplo, consulte a Documentação de política do Portieris.

    kubectl get ClusterImagePolicy
    
  2. Liste as políticas de imagem que se aplicam a namespaces específicos dentro do cluster. Para obter uma configuração de exemplo, consulte a Documentação de política do Portieris.

    kubectl get ImagePolicy --all-namespaces