Exibindo aplicativos publicamente com o Ingress
Exponha publicamente 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 conjuntos de workers usando 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 ativar o VRF, consulte Ativando o VRF.
Para verificar se um VRF já está ativado, use o comando
ibmcloud account show. Se não puder ou não quiser ativar a VRF, ative a Ampliação de VLAN. Quando um VRF ou VLAN spanning é ativado, o controlador do Ingress pode rotear pacotes para várias sub-redes na conta.
Exposição pública de aplicativos em clusters por meio de um endpoint de serviço em nuvem pública
Clusters clássicos Nuvem Privada Virtual
Se o seu cluster tiver sido criado na infraestrutura clássica, ou se tiver sido criado na infraestrutura VPC e você tiver habilitado o endpoint do serviço de nuvem pública no momento da criação, você poderá usar o controlador Ingress público padrão para expor os aplicativos do seu cluster, de modo que recebam solicitações provenientes da rede pública.
Antes de Iniciar:
- Revise o Ingresso pré-requisitos.
- Acesse o seu Red Hat OpenShift cluster.
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: - <domain> secretName: <secret_name> rules: - host: <domain> http: paths: - path: /<app1_path> pathType: Prefix backend: service: name: test 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 Ingresso. Substitua<tls_secret_name>pelo segredo que você criou anteriormente que mantém o seu certificado e chave de 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, comosubdomain1.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 Ingress. 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. Parahttp://domain/, insira/como o caminho. Parahttp://domain/app1_path, insira/app1_pathcomo o caminho. pathType- O método de correspondência de caminho da URL. Os valores suportados são
ImplementationSpecific,ExactouPrefix. Para obter mais informações e exemplos de cada tipo de caminho, consulte a Documentação do Kubernetes da comunidade. 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: Acessar seu app na Internet
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.
Expondo apps publicamente em clusters de VPC com um terminal em serviço de nuvem privada apenas
Nuvem Privada Virtual
Se o seu cluster for criado em uma infraestrutura VPC e você tiver habilitado apenas o endpoint do serviço de nuvem privada no momento da criação, ele será criado, por padrão, apenas com um controlador Ingress privado. Para expor publicamente apps, deve-se primeiro criar um controlador do Ingress público. 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 do Ingress
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 ”.
TLS segredos para domínios do Ingress gerenciados pelo IBM
Siga as etapas para configurar os segredos d TLS para o domínio do Ingress gerenciado pelo IBM.
- 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 público
Após obter seu certificado de domínio e TLS pronto, você deve criar um controlador Ingresso público e configurar o controlador com o seu domínio.
-
Crie um arquivo de configuração para um controlador do Ingress público.
apiVersion: operator.openshift.io/v1 kind: IngressController metadata: name: public-ingress-controller namespace: openshift-ingress-operator spec: replicas: 2 domain: <domain> endpointPublishingStrategy: loadBalancer: scope: External type: LoadBalancerService -
Crie o recurso IngressController no projeto
openshift-ingress-operatordo seu cluster. Quando você cria o IngressController, um controlador de ingresso Público é automaticamente criado e implementado no projetoopenshift-ingresscom base nas configurações do IngressController. Além disso, um serviço de controlador de ingresso é criado para expor o controlador de ingresso.oc create -f public-ingress-controller.yaml -n openshift-ingress-operator -
Execute o comando
oc gete localize o nome do host do VPC no campo EXTERNAL IP do serviço dorouter-public-ingress-controllerEm clusters de VPC, os endereços IP externos dos serviços são não estáticos e, em vez disso, são mantidos atrás de um nome do host designado por VPC.oc get svc router-public-ingress-controller -n openshift-ingressSaída de exemplo
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE router-public-ingress-controller LoadBalancer 172.21.57.132 1234abcd-us-south.lb.appdomain.cloud 80/TCP,443/TCP,1940/TCP 3m -
Registre o nome do host da VPC do serviço com o domínio que você escolheu anteriormente.
- Domínio customizado: trabalhe com seu provedor de DNS para incluir o nome do host da VPC do serviço
router-public-ingress-controllercomo um CNAME que é mapeado para o seu domínio customizado. - Domínio fornecido pela IBM: crie uma entrada DNS para o nome do host da VPC do serviço
router-public-ingress-controller. Ao executar o comando a seguir, o subdomínio que você especificou no arquivopublic-ingress-controller.yamlé gerado automaticamente e é registrado com o serviçorouter-public-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 nome do host da VPC 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> pathType: Prefix 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 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, comosubdomain1.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 Ingress. 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 usarhttp://domain/, digite/como o caminho. Parahttp://domain/app1_path, insira/app1_pathcomo o caminho. pathType- O método de correspondência de caminho da URL. Os valores suportados são
ImplementationSpecific,ExactouPrefix. Para obter mais informações e exemplos de cada tipo de caminho, consulte a Documentação do Kubernetes da comunidade. 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 5: acessar seu app por meio da Internet
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.
Expondo publicamente apps que estão fora de seu cluster
Exponha apps que estão fora de seu cluster para o público, incluindo-os no balanceamento de carga do Ingress público. As solicitações públicas recebidas no domínio customizado ou fornecido pela IBM são encaminhadas automaticamente para o app externo.
Antes de começar, certifique-se de que o aplicativo externo que você deseja incluir no balanceamento de carga do cluster possa ser acessado por meio de um endereço IP público.
Para disponibilizar ao público os aplicativos que estão fora do seu cluster, siga estas etapas.
-
Defina um arquivo de configuração do serviço Kubernetes para o aplicativo que o controlador Ingress expõe. Esse serviço encaminha as solicitações recebidas para um terminal externo que você cria em etapas subsequentes.
apiVersion: v1 kind: Service metadata: name: myexternalservice spec: ports: - protocol: TCP port: <app_port> -
Crie o serviço em seu cluster.
oc apply -f myexternalservice.yaml -
Defina um arquivo de configuração de terminal externo. Inclua todos os endereços IP públicos e portas que podem ser usados para acessar seu app externo. Observe que o nome do endpoint deve ser o mesmo que o nome do serviço que você criou na etapa anterior; por exemplo,
myexternalservice.kind: Endpoints apiVersion: v1 metadata: name: myexternalservice subsets: - addresses: - ip: <external_IP1> - ip: <external_IP2> ports: - port: <external_port>name- Substitua
<myexternalendpoint>pelo nome do serviço Kubernetes que você criou anteriormente. ip- Substitua
<external_IP>pelos endereços IP públicos para se conectar ao seu app externo. port- Substitua
<external_port>pela porta em que seu app externo atende.
-
Crie o terminal em seu cluster.
oc apply -f myexternalendpoint.yaml -
Continue com a segunda etapa em Publicar apps em clusters de VPC com um terminal em serviço de nuvem privada apenas ou Publicar apps em clusters com um terminal em serviço de nuvem pública.