Serviço usando HTTP
Restrições
- Somente os clusters v1.19.16 ou posterior suportam HTTP.
- Não conecte o ingress e o Serviço que usa HTTP ao mesmo ouvinte do mesmo balanceador de carga. Caso contrário, ocorre um conflito de portas.
- O roteamento de camada-7 do ELB pode ser habilitado para Serviços. Os balanceadores de carga do ELB compartilhados e dedicados podem ser interconectados.
As restrições em balanceadores de carga do ELB dedicados são as seguintes:
- Para interconectar-se com um balanceador de carga dedicado existente, o flavor do balanceador de carga deve suportar o roteamento de camada-4 e camada-7. Caso contrário, o balanceador de carga não funcionará como esperado.
- Se você usar um balanceador de carga criado automaticamente, não poderá usar o console do CCE para criar automaticamente um balanceador de carga dedicado à camada 7. Em vez disso, você pode usar o YAML para criar um balanceador de carga dedicado à camada 7, use os recursos da camada 4 e da camada 7 da instância exclusiva do ELB (ou seja, especifique os flavors de camada-4 e camada-7 na anotação de kubernetes.io/elb.autocreate).
Serviço usando HTTP
As seguintes anotações precisam ser adicionadas:
- kubernetes.io/elb.protocol-port: "https:443,http:80"
O valor de protocol-port deve ser o mesmo que a porta no campo spec.ports do Serviço. O formato é Protocol:Port. A porta corresponde à do campo service.spec.ports e é liberada como o protocolo correspondente.
- kubernetes.io/elb.cert-id: "17e3b4f4bc40471c86741dc3aa211379"
cert-id indica o ID do certificado no gerenciamento de certificados do ELB. Quando https é configurado para protocol-port, o certificado do ouvinte do ELB será ajustado ao certificado cert-id. Quando vários serviços HTTPS são liberados, o mesmo certificado é usado.
Segue-se um exemplo de configuração. Os dois ports em spec.ports correspondem aos de kubernetes.io/elb.protocol-port. As portas 443 e 80 estão habilitadas para solicitações HTTPS e HTTP, respectivamente.
apiVersion: v1 kind: Service metadata: annotations: # When an ELB load balancer is automatically created, both layer-4 and layer-7 flavors need to be specified. kubernetes.io/elb.autocreate: ' { "type": "public", "bandwidth_name": "cce-bandwidth-1634816602057", "bandwidth_chargemode": "bandwidth", "bandwidth_size": 5, "bandwidth_sharetype": "PER", "eip_type": "5_bgp", "available_zone": [ "" ], "l7_flavor_name": "L7_flavor.elb.s2.small" }' kubernetes.io/elb.class: performance kubernetes.io/elb.protocol-port: "https:443,http:80" kubernetes.io/elb.cert-id: "17e3b4f4bc40471c86741dc3aa211379" labels: app: nginx name: test name: test namespace: default spec: ports: - name: cce-service-0 port: 443 protocol: TCP targetPort: 80 - name: cce-service-1 port: 80 protocol: TCP targetPort: 80 selector: app: nginx version: v1 sessionAffinity: None type: LoadBalancer
Use as configurações de exemplo anteriores para criar um Serviço. No novo balanceador de carga do ELB, você pode ver que os ouvintes nas portas 443 e 80 são criados.