Uso do kubectl para criar um ingress de Nginx
Cenário
Esta seção usa uma carga de trabalho do Nginx como exemplo para descrever como criar um ingress de Nginx usando o kubectl.
Pré-requisitos
- O complemento nginx-ingress foi instalado em um cluster. Para mais detalhes, consulte Instalar o complemento.
- Um ingress fornece acesso à rede para cargas de trabalho de back-end. Certifique-se de que uma carga de trabalho esteja disponível em um cluster. Se nenhuma carga de trabalho estiver disponível, implemente uma carga de trabalho referindo-se a Criação de uma Implantação, Criação de um StatefulSet ou Criação de um DaemonSet.
- Um Serviço ClusterIP ou NodePort foi configurado para a carga de trabalho. Para obter detalhes sobre como configurar o Serviço, consulte ClusterIP ou NodePort.
Descrição de ingress de networking.k8s.io/v1
Em clusters do CCE de v1.23 ou posterior, a versão de ingress é comutada para networking.k8s.io/v1.
Comparada com v1beta1, v1 tem as seguintes diferenças nos parâmetros:
- O tipo de ingress é alterado de kubernetes.io/ingress.class em annotations para spec.ingressClassName.
- O formato de backend é alterado.
- O parâmetro pathType deve ser especificado para cada caminho. As opções são as seguintes:
- ImplementationSpecific: o método de correspondência depende do Ingress Controller. O método de correspondência definido por ingress.beta.kubernetes.io/url-match-mode é usado no CCE, que é o mesmo que v1beta1.
- Exact: correspondência exata do URL, que diferencia maiúsculas de minúsculas.
- Prefix: correspondência com base no prefixo de URL separado por uma barra (/). A correspondência diferencia maiúsculas de minúsculas, e os elementos no caminho são correspondidos um a um. Um elemento path refere-se a uma lista de rótulos no caminho separados por uma barra (/).
Criar um ingress de Nginx
- Use o kubectl para se conectar ao cluster. Para mais detalhes, consulte Conexão a um cluster usando o kubectl.
- Crie um arquivo YAML chamado ingress-test.yaml. O nome do arquivo pode ser personalizado.
vi ingress-test.yaml
A partir do cluster v1.23, a versão de entrada é alternada de networking.k8s.io/v1beta1 para networking.k8s.io/v1. Para obter detalhes sobre as diferenças entre v1 e v1beta1, consulte Descrição de ingress de networking.k8s.io/v1.
O seguinte usa HTTP como um exemplo para descrever como configurar o arquivo YAML:
Se o nó estiver em um cluster de v1.23 ou posterior:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-test spec: rules: - host: '' http: paths: - path: / backend: service: name: <your_service_name> # Replace it with the name of your target Service. port: number: <your_service_port> # Replace it with the port number of your target Service. property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH pathType: ImplementationSpecific ingressClassName: nginx # Nginx ingress is used.
Se o nó estiver em um cluster de v1.21 ou anterior:apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: ingress-test namespace: default annotations: kubernetes.io/ingress.class: nginx # Nginx ingress is used. spec: rules: - host: '' http: paths: - path: '/' backend: serviceName: <your_service_name> # Replace it with the name of your target Service. servicePort: <your_service_port> # Replace it with the port number of your target Service.
Tabela 1 Parâmetros principais Parâmetro
Obrigatório
Tipo
Descrição
kubernetes.io/ingress.class
Sim (somente para clusters da v1.21 ou anterior)
String
nginx: indica que ingress de Nginx é usado. Esta opção não pode ser usada se o complemento nginx-ingress não estiver instalado.
Esse parâmetro é obrigatório quando um ingress é criado chamando a API.
ingressClassName
Sim
(somente para clusters da v1.23 ou posterior)
String
nginx: indica que Nginx ingress é usado. Esta opção não pode ser usada se o complemento nginx-ingress não estiver instalado.
Esse parâmetro é obrigatório quando um ingress é criado chamando a API.
host
Não
String
Nome de domínio para acessar o Serviço. Por padrão, esse parâmetro é deixado em branco e o nome de domínio precisa ser totalmente correspondido. Certifique-se de que o nome de domínio tenha sido registrado e arquivado. Depois que uma regra de nome de domínio estiver configurada, você deve usar o nome de domínio para acesso.
path
Sim
String
Caminho de rota definido pelo usuário. Todas as solicitações de acesso externo devem corresponder ao host e ao path.
NOTA:- A regra de correspondência do caminho de acesso de Nginx ingress é baseada no prefixo do caminho separado pela barra (/) e diferencia maiúsculas de minúsculas. Se o subcaminho separado por uma barra (/) corresponder ao prefixo, o acesso será normal. No entanto, se o prefixo for apenas uma parte da cadeia de caracteres no subcaminho, o acesso não será correspondido. Por exemplo, se o URL estiver definido como /healthz, /healthz/v1 será correspondido, mas /healthzv1 não será correspondido.
- O caminho de acesso adicionado aqui deve existir na aplicação back-end. Caso contrário, o encaminhamento falha.
Por exemplo, o URL de acesso padrão da aplicação Nginx é /usr/share/nginx/html. Ao adicionar /test à política de encaminhamento de ingress, certifique-se de que o URL de acesso da seu aplicação Nginx contenha /usr/share/nginx/html/test. Caso contrário, o erro 404 será retornado.
ingress.beta.kubernetes.io/url-match-mode
Não
String
Política de correspondência de rotas.
Padrão: STARTS_WITH (correspondência de prefixo)
Opções:
- EQUAL_TO: correspondência exata
- STARTS_WITH: correspondência de prefixo
pathType
Sim
String
Tipo de caminho. Este campo é suportado apenas por clusters de v1.23 ou posterior.- ImplementationSpecific: o método de correspondência depende do Ingress Controller. O método de correspondência definido por ingress.beta.kubernetes.io/url-match-mode é usado no CCE.
- Exact: correspondência exata do URL, que diferencia maiúsculas de minúsculas.
- Prefix: correspondência de prefixo, que diferencia maiúsculas de minúsculas. Com esse método, o caminho do URL é separado em vários elementos por barras (/) e os elementos são correspondidos um por um. Se cada elemento no URL corresponder ao caminho, os subcaminhos do URL poderão ser roteados normalmente.
NOTA:
- Durante a correspondência de prefixo, cada elemento deve ser exatamente correspondido. Se o último elemento do URL for a subcadeia do último elemento no caminho da solicitação, nenhuma correspondência será executada. Por exemplo, /foo/bar corresponde a /foo/bar/baz, mas não corresponde a /foo/barbaz.
- Quando elementos são separados por barras (/), se o URL ou o caminho da requisição termina com uma barra (/), a barra (/) no final é ignorada. Por exemplo, /foo/bar corresponde a /foo/bar/.
Veja exemplos de correspondência de caminho de ingress.
- Crie um ingress.
kubectl create -f ingress-test.yaml
Se forem exibidas informações semelhantes às seguintes, o ingress foi criado.
ingress/ingress-test created
Visualize o ingress criado.
kubectl get ingress
Se informações semelhantes às seguintes forem exibidas, o ingress foi criado com êxito e a carga de trabalho está acessível.
NAME HOSTS ADDRESS PORTS AGE ingress-test * 121.**.**.** 80 10s
- Digite http://121.**.**.**:80 na caixa de endereço do navegador para acessar a carga de trabalho (por exemplo, carga de trabalho do Nginx).
121.**.**.** indica o endereço IP do balanceador de carga unificado.