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.
