Exposição privada de aplicativos com o Ingress
Exponha de forma privada vários aplicativos em seu cluster do Red Hat® OpenShift® on IBM Cloud® criando recursos Ingress gerenciados pelo controlador Ingress.
Pré-requisitos
Antes de começar com o Ingresso, revise os pré-requisitos a seguir.
- A configuração do Ingress requer as funções do IBM Cloud IAM a seguir:
- Função de acesso à plataforma de administrador para o cluster em IBM Cloud Kubernetes Service.
- Função de acesso ao serviço de gerenciamento em todos os namespaces do IBM Cloud Kubernetes Service (projetos do Red Hat OpenShift ).
- Se uma zona falhar, você pode ver falhas intermitentes em solicitações a apps que são expostos pelo controlador de ingresso naquela zona.
- Para assegurar a alta disponibilidade, pelo menos dois nós do trabalhador por zona são recomendados.
- Clusters VPC: Permitam que as solicitações de tráfego roteadas pelo Ingress cheguem às portas dos nós de trabalho. Para obter mais informações, consulte Noções básicas sobre redes de VPC de cluster seguras por padrão e Criação e gerenciamento de grupos de segurança de VPC.
- Clusters VPC com várias zonas: Se você criou um cluster na CLI e, posteriormente, adicionou manualmente zonas aos seus pools de workers com o comando
ibmcloud oc zone add vpc-gen2, é necessário atualizar o balanceador de carga da VPC que expõe o controlador Ingress para incluir as sub-redes de todas as zonas do seu cluster. - Clusters clássicos: ativa um Virtual Router Function (VRF) para a sua conta de infraestrutura do IBM Cloud. Para verificar se um VRF já está ativado, use o comando
ibmcloud account show. Se você não puder ou não quiser habilitar o VRF, habilite o spanning de VLAN. Quando um VRF ou VLAN spanning é ativado, o controlador do Ingress pode rotear pacotes para várias sub-redes na conta.
Expondo privadamente apps com um terminal em serviço de nuvem pública
Clusters clássicos Nuvem Privada Virtual
Se o seu cluster for criado na infraestrutura clássica, ou se for criado na infraestrutura VPC e você tiver habilitado o endpoint do serviço de nuvem pública durante a criação do cluster, ele será criado, por padrão, apenas com um controlador Ingress público. Para expor privadamente seus apps, você deve primeiro criar um controlador Ingresso privado. Em seguida, deve-se registrar o controlador do Ingress com um subdomínio e, opcionalmente, importar o próprio certificado TLS.
Etapa 1: Implementar apps e criar serviços de app
Inicie implementando seus apps e criando serviços do Kubernetes para expô-los.
-
Implemente o seu app no cluster. Assegure-se de incluir um rótulo em sua implementação na seção de metadados de seu arquivo de configuração, como
app: code. Este rótulo é necessário para identificar todos os pods em que seu app executa para que os pods estejam no balanceamento de carga de ingresso. -
Para cada implementação de app que você deseja expor, crie um serviço
ClusterIPdo Kubernetes. O seu app deve ser exposto por um serviço do Kubernetes a ser incluído no balanceamento de carga do Ingress.
oc expose deploy <app_deployment_name> --name my-app-svc --port <app_port> -n <namespace>
Etapa 2: Configurar uma terminaçã TLS e com certificados TLS e segredos Kubernetes
Seu certificado do TLS deve ser armazenado como um segredo do Kubernetes em cada namespace onde seus aplicativos estejam hospedados.
TLS segredos para domínios personalizados
Para configurar segredos d TLS para um domínio criado por você mesmo, como um domínio registrado em um provedor externo, consulte a seção “Configurando segredos d TLS para subdomínios personalizados ”. Essas etapas se aplicam tanto aos clusters clássicos quanto aos clusters VPC.
TLS segredos para o domínio gerenciado pelo IBM
-
Clusters clássicos Para usar o domínio Ingress gerenciado pelo IBM em um cluster clássico, consulte “Configurando segredos do TLS para o subdomínio Ingress fornecido pelo IBM ”.
-
Clusters VPC Para usar o domínio do Ingress gerenciado pela IBMem um cluster VPC, siga estas etapas.
- Liste os subdomínios existentes em seu cluster. Na coluna Subdomínio da saída, copie o subdomínio que tem o valor de
000<n>mais alto.
Nesta saída de exemplo, o subdomínioibmcloud oc nlb-dns ls --cluster CLUSTER_NAME_OR_IDmycluster-a1b2cdef345678g9hi012j3kl4567890-0002.us-south.containers.appdomain.cloudtem o valor000<n>mais alto de0002.Subdomain Load Balancer Hostname Health Monitor SSL Cert Status SSL Cert Secret Name mycluster-a1b2cdef345678g9hi012j3kl4567890-0000.us-south.containers.appdomain.cloud ["1234abcd-us-south.lb.appdomain.cloud"] None created mycluster-a1b2cdef345678g9hi012j3kl4567890-0000 mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud ["5678efgh-us-south.lb.appdomain.cloud"] None created mycluster-a1b2cdef345678g9hi012j3kl4567890-0001 mycluster-a1b2cdef345678g9hi012j3kl4567890-0002.us-south.containers.appdomain.cloud ["9012ijkl-us-south.lb.appdomain.cloud"] None created mycluster-a1b2cdef345678g9hi012j3kl4567890-0002 - No subdomínio que você copiou, mude o valor
000<n>no subdomínio para000<n+1>. Por exemplo, o subdomíniomycluster-a1b2cdef345678g9hi012j3kl4567890-0002.us-south.containers.appdomain.cloudé alterado paramycluster-a1b2cdef345678g9hi012j3kl4567890-0003.us-south.containers.appdomain.cloud. O valorn+1indica o próximo subdomínio consecutivo criado nesse cluster. Você registra este subdomínio nas etapas posteriores. Ao registrar o domínio, um segredo de “ TLS ” para o domínio é gerado automaticamente. O nome secreto segue um formato truncado do subdomínio, comomycluster-a1b2cdef345678g9hi012j3kl4567890-0003.
Etapa 3: criar e configurar um controlador do Ingress privado
Após obter o certificado de domínio e TLS pronto, deve-se criar um controlador do Ingress privado e configurar o controlador com o domínio.
- Crie um arquivo de configuração para um controlador do Ingress privado.
apiVersion: operator.openshift.io/v1 kind: IngressController metadata: name: private-ingress-controller namespace: openshift-ingress-operator spec: #defaultCertificate: If you are using a custom domain, specify the domain certificate #name: custom-certs-default replicas: 2 domain: <domain> endpointPublishingStrategy: loadBalancer: scope: Internal type: LoadBalancerService - Crie o recurso IngressController no projeto
openshift-ingress-operatordo seu cluster. Quando você cria o IngressController, um controlador Ingress privado é automaticamente criado e implantado no projetoopenshift-ingresscom base nas configurações IngressController que você definiu na etapa anterior. Além disso, é criado um serviço de controlador do Ingress para disponibilizar o controlador do Ingress por meio de um endereço IP (clusters clássicos) ou de um nome de host da VPC (clusters da VPC).oc create -f private-ingress-controller.yaml -n openshift-ingress-operator - Execute o comando
oc gete localize o endereço IP ou nome do host do VPC no campo EXTERNAL IP do serviçorouter-private-ingress-controller.
Exemplo de saída para clusters clássicos.oc get svc router-private-ingress-controller -n openshift-ingress
Saída de exemplo para clusters VPC:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE router-private-ingress-controller LoadBalancer 172.21.57.132 10.XX.XX.XX 80/TCP,443/TCP,1940/TCP 3mNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE router-private-ingress-controller LoadBalancer 172.21.57.132 1234abcd-us-south.lb.appdomain.cloud 80/TCP,443/TCP,1940/TCP 3m - Registre o endereço IP externo do serviço ou o nome do host de VPC com o domínio que você escolheu anteriormente.
- Domínio customizado: trabalhe com seu provedor de DNS para incluir o endereço IP externo do serviço
router-private-ingress-controllercomo um registro A (clusters clássicos) ou nome do host de VPC como um CNAME (clusters VPC) que é mapeado para o seu domínio customizado. - Domínio fornecido pela IBM: crie uma entrada DNS para o nome do host de VPC do serviço
router-private-ingress-controller. Ao executar o comando a seguir, o subdomínio que você especificou no arquivoprivate-ingress-controller.yamlé gerado automaticamente e é registrado com o serviçorouter-private-ingress-controller. Um segredo do TLS para o domínio é gerado automaticamente no projeto que você especifica no qual seu app é executado. O nome secreto segue um formato truncado do subdomínio, comomycluster-a1b2cdef345678g9hi012j3kl4567890-0003.
ibmcloud oc nlb-dns create vpc-gen2 --cluster <cluster_name_or_ID> --lb-host <VPC_hostname> --secret-namespace <project> ``` - Domínio customizado: trabalhe com seu provedor de DNS para incluir o endereço IP externo do serviço
Etapa 4: Criar o Recurso do Ingresso
Os recursos do Ingress definem as regras de roteamento que o controlador do Ingress usa para rotear o tráfego para o seu serviço de app.
-
Defina um arquivo de configuração de recursos do Ingress que use o domínio fornecido pela IBM ou seu domínio customizado para rotear o tráfego de rede recebido para os serviços criados anteriormente.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: myingressresource spec: tls: - hosts: - <subdomain> secretName: <custom_secret_name> rules: - host: <subdomain> http: paths: - path: /<app1_path> backend: service: name: <app1_service> port: number: 80 - path: /<app2_path> backend: serivce: name: <app2_service> port: number: 80tls-
- Se quiser usar o TLS, inclua esta seção TLS em seu recurso. Substitua
<domain>pelo seu subdomínio. Não use*para o seu host ou deixe a propriedade do host vazia para evitar falhas durante a criação do Ingresso. - Substitua
<tls_secret_name>pelo segredo que você criou anteriormente que mantém o seu certificado e chave TLS para um domínio customizado ou o segredo de TLS que foi gerado automaticamente para um subdomínio fornecido pela IBM.
- Se quiser usar o TLS, inclua esta seção TLS em seu recurso. Substitua
host-
- Substitua
<domain>pelo seu subdomínio. - Se o seu cluster tiver diversos projetos nos quais os apps são expostos, um recurso do Ingress será necessário por projeto. É possível usar o mesmo subdomínio em cada recurso ou subdomínios diferentes em cada recurso. Por exemplo,
se você usar um domínio curinga, será possível anexar um subdomínio curinga ao início do domínio, como
subdomain1.custom_domain.net. - Não use
*para o seu host ou deixe a propriedade do host vazia para evitar falhas durante a criação do Ingresso.
- Substitua
path-
- Substitua
<app_path>pelo caminho no qual seu aplicativo está em escuta. O caminho é anexado ao domínio fornecido pela IBM ou ao seu domínio customizado para criar uma rota exclusiva para o app. Quando você insere essa rota em um navegador da web, o tráfego de rede é roteado para o controlador de Ingresso. O controlador de ingresso consulta o serviço associado e envia o tráfego de rede para o serviço. O serviço então encaminha o tráfego para os pods nos quais o app é executado. Muitos apps não atendem em um caminho específico, mas usam o caminho raiz e uma porta específica. Neste caso, defina o caminho raiz como/e não especifique um caminho individual para o seu app. - Por exemplo, para usar
http://domain/, insira/como o caminho.. Parahttp://domain/app1_path, insira/app1_pathcomo o caminho.
- Substitua
serviceName- Substitua
<app1_service>e<app2_service>, e assim por diante, pelo nome dos serviços que você criou para expor seus apps. Se os seus apps forem expostos por serviços em diferentes projetos no cluster, inclua somente os serviços de app que estão no mesmo projeto. É necessário criar um recurso do Ingress para cada projeto que contenha os aplicativos que você deseja expor. servicePort- A porta na qual o serviço atende. Use a mesma porta que você definiu quando criou o serviço do Kubernetes para seu app.
-
Crie o recurso de Ingresso para seu cluster. Assegure-se de que o recurso seja implementado no mesmo projeto que os serviços de app especificados no recurso.
oc apply -f myingressresource.yaml -n <project> -
Verifique se o recurso de Ingresso foi criado com êxito. Se as mensagens nos eventos indicarem um erro na configuração do seu recurso, corrija os valores no arquivo de recursos e reaplique o arquivo ao recurso.
oc describe ingress myingressresource
Seu recurso do Ingress é criado no mesmo projeto que seus serviços de app e seus apps são registrados com o controlador do Ingress.
Etapa 5: acessar seu app por meio de sua rede privada
-
Clusters clássicos: Antes de acessar o seu app, certise-se de que você pode acessar um serviço de DNS. Para usar o provedor de DNS externo padrão, é necessário configurar os nós de borda com acesso público e definir um endereço de domínio de pesquisa(Virtual Router Appliance ).
-
De dentro de sua rede privada, insira a URL do serviço de aplicativo em um navegador da web.
https://<domain>/<app1_path>Se tiver exposto diversos apps, acesse-os mudando o caminho anexado à URL.
https://<domain>/<app2_path>Se você usa um domínio curinga, acesse esses apps com os seus próprios subdomínios.
http://<subdomain1>.<domain>/<app1_path>http://<subdomain2>.<domain>/<app1_path>
Não é possível conectar ao seu app por meio do Ingress? Tente Resolução de problemas do Ingress.
Expondo apps de forma privada em clusters de VPC com um terminal em serviço de nuvem privada apenas
Se o seu cluster tiver sido criado em uma infraestrutura VPC e você tiver habilitado apenas o endpoint do serviço de nuvem privada ao criá-lo, é possível usar o controlador Ingress privado padrão para expor os aplicativos do seu cluster às solicitações provenientes da rede privada.
Etapa 1: Implementar apps e criar serviços de app
Inicie implementando seus apps e criando serviços do Kubernetes para expô-los.
-
Implemente o seu app no cluster. Assegure-se de incluir um rótulo em sua implementação na seção de metadados de seu arquivo de configuração, como
app: code. Este rótulo é necessário para identificar todos os pods em que seu app executa para que os pods estejam no balanceamento de carga de ingresso. -
Para cada implementação de app que você deseja expor, crie um serviço
ClusterIPdo Kubernetes. O seu app deve ser exposto por um serviço do Kubernetes a ser incluído no balanceamento de carga do Ingress.
oc expose deploy <app_deployment_name> --name my-app-svc --port <app_port> -n <namespace>
Etapa 2: Configurar uma terminaçã TLS e com certificados TLS e segredos Kubernetes
Seu certificado do TLS deve ser armazenado como um segredo do Kubernetes em cada namespace onde seus aplicativos estejam hospedados.
-
Para usar o domínio Ingress gerenciado pelo IBM, consulte a seção “Configurando segredos do TLS para o subdomínio Ingress fornecido pelo IBM ”.
-
Para usar um domínio criado por você mesmo, como um domínio registrado em um provedor externo, consulte a seção “Configurando segredos d TLS ” para subdomínios personalizados.
Etapa 3: Criar o recurso de Ingresso
Os recursos do Ingress definem as regras de roteamento que o controlador do Ingress usa para rotear o tráfego para o seu serviço de app.
-
Defina um arquivo de configuração de recursos do Ingress que use o domínio fornecido pela IBM ou seu domínio customizado para rotear o tráfego de rede recebido para os serviços criados anteriormente.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: myingressresource spec: tls: - hosts: - <custom_domain> secretName: <custom_secret_name> rules: - host: <domain> http: paths: - path: /<app1_path> backend: service: name: <app1_service> port: number: 80 - path: /<app2_path> backend: service: name: <app2_service> port: number: 80tls-
- Se quiser usar o TLS, inclua esta seção TLS em seu recurso.
- Substitua
<domain>pelo seu subdomínio. Não use * para o seu host ou deixe a propriedade do host vazia para evitar falhas durante a criação do Ingress. - Substitua
<tls_secret_name>pelo segredo que você criou anteriormente que mantém o seu certificado e chave TLS para um domínio customizado ou o segredo de TLS que foi gerado automaticamente para um subdomínio fornecido pela IBM.
host-
- Substitua
<domain>pelo subdomínio do Ingress fornecido pela IBM ou o domínio customizado. - Se o seu cluster tiver diversos projetos nos quais os apps são expostos, um recurso do Ingress será necessário por projeto. É possível usar o mesmo subdomínio em cada recurso ou subdomínios diferentes em cada recurso. Por exemplo,
se você usar um domínio curinga, poderá anexar um subdomínio curinga no início do domínio, como
subdomain1.custom_domain.netousubdomain1.mycluster-<hash>-0000.us-south.containers.appdomain.cloud. Não use*para o seu host ou deixe a propriedade do host vazia para evitar falhas durante a criação do Ingresso.
- Substitua
path-
- Substitua
<app_path>pelo caminho no qual seu aplicativo está em escuta. O caminho é anexado ao domínio fornecido pela IBM ou ao seu domínio customizado para criar uma rota exclusiva para o app. Quando você insere essa rota em um navegador da web, o tráfego de rede é roteado para o controlador de Ingresso. O controlador de ingresso consulta o serviço associado e envia o tráfego de rede para o serviço. O serviço então encaminha o tráfego para os pods nos quais o app é executado. Muitos apps não atendem em um caminho específico, mas usam o caminho raiz e uma porta específica. Neste caso, defina o caminho raiz como/e não especifique um caminho individual para o seu app. - Por exemplo, para usar
http://domain/, insira/como o caminho.. Parahttp://domain/app1_path, insira/app1_pathcomo o caminho.
- Substitua
name- Substitua
<app1_service>e<app2_service>, e assim por diante, pelo nome dos serviços que você criou para expor seus apps. Se os seus apps forem expostos por serviços em diferentes projetos no cluster, inclua somente os serviços de app que estão no mesmo projeto. Deve-se criar um recurso do Ingress para cada projeto no qual haja apps a serem expostos. port- A porta na qual o serviço atende. Use a mesma porta que você definiu quando criou o serviço do Kubernetes para seu app.
-
Crie o recurso de Ingresso para seu cluster. Assegure-se de que o recurso seja implementado no mesmo projeto que os serviços de app especificados no recurso.
oc apply -f myingressresource.yaml -n <project> -
Verifique se o recurso de Ingresso foi criado com êxito. Se as mensagens nos eventos indicarem um erro na configuração do seu recurso, corrija os valores no arquivo de recursos e reaplique o arquivo ao recurso.
oc describe ingress myingressresource
Seu recurso do Ingress é criado no mesmo projeto que seus serviços de app e seus apps são registrados com o controlador do Ingress.
Etapa 4: Acesse seu aplicativo
Em um navegador da web, insira a URL do serviço de app a ser acessado.
https://<domain>/<app1_path>
Se tiver exposto diversos apps, acesse-os mudando o caminho anexado à URL.
https://<domain>/<app2_path>
Se você usa um domínio curinga, acesse esses apps com os seus próprios subdomínios.
http://<subdomain1>.<domain>/<app1_path>
http://<subdomain2>.<domain>/<app1_path>
Não é possível conectar ao seu app por meio do Ingress? Tente Resolução de problemas do Ingress.