Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Atualizado em 2024-11-28 GMT+08:00

ClusterIP

Cenário

Os Serviços ClusterIP permitem que cargas de trabalho no mesmo cluster usem seus nomes de domínio internos do cluster para acessar uns aos outros.

O formato de nome de domínio interno do cluster é <Service name>.<Namespace of the workload>.svc.cluster.local:<Port>, por exemplo, nginx.default.svc.cluster.local:80.

Figura 1 mostra os relacionamentos de mapeamento entre canais de acesso, portas de contêiner e portas de acesso.

Figura 1 Acesso dentro do cluster (ClusterIP)

Criar um Serviço ClusterIP

  1. Efetue logon no console do CCE e acesse o console do cluster.
  2. Escolha Networking no painel de navegação e clique em Create Service no canto superior direito.
  3. Defina os parâmetros de acesso dentro do cluster.

    • Service Name: nome do serviço, que pode ser o mesmo que o nome da carga de trabalho.
    • Service Type: selecione ClusterIP.
    • Namespace: namespace ao qual a carga de trabalho pertence.
    • Selector: adicione um rótulo e clique em Confirm. Um Serviço seleciona um pod com base no rótulo adicionado. Você também pode clicar em Reference Workload Label para fazer referência ao rótulo de uma carga de trabalho existente. Na caixa de diálogo exibida, selecione uma carga de trabalho e clique em OK.
    • IPv6: esta função está desativada por padrão. Depois que essa função é ativada, o endereço IP do cluster do Serviço muda para um endereço IPv6. Para obter detalhes, consulte Criação de um cluster IPv4/IPv6 de pilha dupla no CCE. Este parâmetro está disponível apenas em clusters de v1.15 ou posterior com IPv6 habilitado (definido durante a criação do cluster).
    • Port Settings
      • Protocol: protocolo utilizado pelo Serviço.
      • Service Port: porta utilizada pelo Serviço. O número da porta varia de 1 a 65535.
      • Container Port: porta na qual a carga de trabalho escuta. Por exemplo, o Nginx usa a porta 80 por padrão.

  4. Clique em OK.

Configurar o tipo de acesso usando o kubectl

Você pode executar comandos kubectl para definir o tipo de acesso (Serviço). Esta seção usa uma carga de trabalho do Nginx como exemplo para descrever como implementar o acesso dentro do cluster usando kubectl.

  1. Use o kubectl para se conectar ao cluster. Para mais detalhes, consulte Conexão a um cluster usando o kubectl.
  2. Crie e edite os arquivos nginx-deployment.yaml e nginx-clusterip-svc.yaml.

    Os nomes dos arquivos são definidos pelo usuário. nginx-deployment.yaml e nginx-clusterip-svc.yaml são apenas nomes de arquivo de exemplo.

    vi nginx-deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - image: nginx:latest
            name: nginx
          imagePullSecrets:
          - name: default-secret
    vi nginx-clusterip-svc.yaml
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: nginx
      name: nginx-clusterip
    spec:
      ports:
      - name: service0
        port: 8080                # Port for accessing a Service.
        protocol: TCP             # Protocol used for accessing a Service. The value can be TCP or UDP.
        targetPort: 80            # Port used by a Service to access the target container. This port is closely related to the applications running in a container. In this example, the Nginx image uses port 80 by default.
      selector:                   # Label selector. A Service selects a pod based on the label and forwards the requests for accessing the Service to the pod. In this example, select the pod with the app:nginx label.
        app: nginx
      type: ClusterIP             # Type of a Service. ClusterIP indicates that a Service is only reachable from within the cluster.

  3. Crie uma carga de trabalho.

    kubectl create -f nginx-deployment.yaml

    Se forem exibidas informações semelhantes às seguintes, a carga de trabalho foi criada.

    deployment "nginx" created

    kubectl get po

    Se informações semelhantes às seguintes forem exibidas, a carga de trabalho está em execução.

    NAME                     READY     STATUS             RESTARTS   AGE
    nginx-2601814895-znhbr   1/1       Running            0          15s

  4. Crie um Serviço.

    kubectl create -f nginx-clusterip-svc.yaml

    Se forem exibidas informações semelhantes às seguintes, o Serviço foi criado.

    service "nginx-clusterip" created

    kubectl get svc

    Se informações semelhantes às seguintes forem exibidas, o Serviço foi criado e um endereço IP interno do cluster foi atribuído ao Serviço.

    # kubectl get svc
    NAME              TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
    kubernetes        ClusterIP   10.247.0.1     <none>        443/TCP    4d6h
    nginx-clusterip   ClusterIP   10.247.74.52   <none>        8080/TCP   14m

  5. Acesse um serviço.

    Um Serviço pode ser acessado a partir de contêineres ou nós em um cluster.

    Crie um pod, acesse o pod e execute o comando curl para acessar IP address:Port ou o nome de domínio do Serviço, conforme mostrado na figura a seguir.

    O sufixo do nome de domínio pode ser omitido. No mesmo namespace, você pode usar diretamente nginx-clusterip:8080 para acesso. Em outros namespaces, você pode usar nginx-clusterip.default:8080 para acesso.

    # kubectl run -i --tty --image nginx:alpine test --rm /bin/sh
    If you do not see a command prompt, try pressing Enter.
    / # curl 10.247.74.52:8080
    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
        body {
            width: 35em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
        }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p>
    
    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>
    
    <p><em>Thank you for using nginx.</em></p>
    </body>
    </html>
    / # curl nginx-clusterip.default.svc.cluster.local:8080
    ...
    <h1>Welcome to nginx!</h1>
    ...
    / # curl nginx-clusterip.default:8080
    ...
    <h1>Welcome to nginx!</h1>
    ...
    / # curl nginx-clusterip:8080
    ...
    <h1>Welcome to nginx!</h1>
    ...