[Nativo da nuvem] Aprendizado profundo de serviço em kubernetes

Serviço

Índice

1 O que é serviço

2 recursos

3 Relação entre Serviço e Pod

4 Use o serviço

5 multiportas

6 tipostipo

7 Comunicação interna


1 O que é serviço

1.1 Definição

Endereço do site oficial: Serviço | Kubernetes

Um método para expor um aplicativo de rede em execução em um pod ou grupo de pods como um serviço de rede.

Definição popular: Serviço é uma forma de fornecer serviços de rede para pods.

1.2 Por que o serviço é necessário

Pergunta: Se um conjunto de Pods (chamado de "backend") fornece funcionalidade para outros Pods dentro do cluster (chamados de "frontend"), como o frontend descobre e controla o endereço IP ao qual se conectar para que o frontend posso usá-lo para atender a carga de trabalho da parte de back-end?

imagem-20230307133342270

Se este for um backend de processamento de imagem, ele executa 3 cópias. Essas cópias são intercambiáveis ​​– os frontends não precisam se preocupar com qual cópia de backend eles chamam. No entanto, os Pods que compõem este grupo de programas de back-end podem realmente mudar.O cliente front-end não deve e não precisa saber, e não há necessidade de rastrear o status deste grupo de back-end. A abstração definida por Service pode desacoplar esta conexão .

2 recursos

  • O serviço associa o pod correspondente por meio do rótulo

  • O ciclo de vida do Servcie não está vinculado ao Pod e o IP não será alterado devido à recriação do Pod.

  • Fornece função de balanceamento de carga para encaminhar automaticamente o tráfego para diferentes pods

  • Fornece portas de acesso fora do cluster

  • O cluster pode ser acessado por meio do nome do serviço

3 Relação entre Serviço e Pod

4 Use o serviço

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 1
  template:
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.19
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 80
      restartPolicy: Always
  selector:
    matchLabels:
      app: nginx
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  ports:
    - port: 8080 #service 端口
      targetPort: 80 #容器端口
      nodePort: 31001 #node 节点端口 固定在 30000-32767 之间
  type: NodePort

注意:节点端口固定在 30000-32767 之间

5 multiportas

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 1
  template:
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.19
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 80
      restartPolicy: Always
  selector:
    matchLabels:
      app: nginx
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  ports:
    - port: 8080 #service 端口
      name: write
      targetPort: 80 #容器端口
      nodePort: 31001 #node 节点端口 固定在 30000-32767 之间
    - port: 8081
      name: read
      targetPort: 80
      nodePort: 31002
  type: NodePort

6 tipostipo

Serviço | Kubernetes

Para determinadas partes de alguns aplicativos (como o front-end), talvez você queira expô-los a endereços IP fora do cluster Kubernetes.

O Kubernetes ServiceTypespermite que você especifique o tipo de serviço necessário.

  • ClusterIP: o serviço é exposto dentro do cluster e só pode ser acessado por outros objetos dentro do cluster. Geralmente é usado para descoberta de serviço interno e não será exposto fora do cluster.

  • NodePort: Expor o Serviço em uma determinada porta do Nó, para que o Serviço possa ser acessado através do endereço IP e número da porta do Nó. Geralmente é usado em ambientes de desenvolvimento e teste.

  • LoadBalancer: Expor o Serviço à rede pública por meio do balanceador de carga fornecido pelo provedor de serviços em nuvem, para que usuários externos possam acessar o Serviço.

  • ExternalName: Mapeie o Serviço para um nome DNS, para que o Serviço possa ser acessado através do nome DNS, geralmente usado para acessar serviços externos.

6.1 Tipo de ClusterIP

  • 这是最常用的 Service 类型之一. Crie um endereço IP virtual dentro do cluster, que pode ser acessado por outros pods no mesmo cluster, mas não pode ser acessado por solicitações fora do cluster. Esse tipo de serviço geralmente é usado para expor serviços internos, como banco de dados ou serviços de cache. Por exemplo, em um aplicativo Web, pode ser necessário conectar-se a um banco de dados, mas o banco de dados não precisa ser exposto fora do aplicativo. Neste momento, você pode usar o serviço do tipo ClusterIP para permitir que a aplicação acesse o banco de dados.

6.2 Tipo NodePort

  • Este tipo de serviço criará uma porta e a vinculará a cada nó do cluster, permitindo que o tráfego externo acesse o serviço. Esse tipo normalmente é usado para expor serviços públicos, como aplicativos Web ou APIs. Por exemplo, se você precisar acessar um aplicativo da web em execução no cluster de fora do cluster, poderá criar um serviço do tipo NodePort e expor o serviço nodePortpara fora do cluster especificando o campo Serviço.

  • Se você typedefinir o campo como NodePort, o plano de controle do Kubernetes --service-node-port-rangealocará portas no intervalo especificado pela sinalização (padrão: 30000-32767).

6.3 Tipo de LoadBalancer

  • Este tipo de serviço é semelhante ao NodePort, mas cria um balanceador de carga no provedor de nuvem. Esse tipo geralmente é usado para implantar aplicativos em plataformas de nuvem. O balanceador de carga da plataforma em nuvem distribui o tráfego para os nós do cluster. Este tipo de serviço só pode ser usado em plataformas de nuvem e requer suporte de fornecedores de nuvem.

6.4 Tipo de nome externo

  • Este tipo de Serviço permite o encaminhamento do Serviço para qualquer entrada DNS CNAME que precise ser acessada. Ao contrário de outros tipos de serviços, ele não faz proxy de solicitações para nenhum pod. Em vez disso, encaminha a solicitação para o endereço externo configurado. Esse tipo de serviço normalmente é usado para fazer proxy de serviços para outros serviços fora do cluster. Por exemplo, se você tiver um serviço em execução na rede externa e quiser usar o serviço no cluster Kubernetes, poderá criar um Serviço do tipo ExternalName para resolver o DNS do serviço para o cluster Kubernetes.

7 Comunicação interna

7.1 Criar pod

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
  labels:
    app: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  replicas: 1
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql/mysql-server:8.0
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: root
        ports:
        - name: mysql
          containerPort: 3306
---
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  selector:
    app: mysql
  ports:
  - name: mysql
    port: 3306
    targetPort: 3306
    type: ClusterIP
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      hostNetwork: true
      containers:
      - name: nginx
        image: nginx:latest
        #command: ["/bin/sh", "-c"]
        #args:
        #- apt-get update && apt-get install -y mysql-client && nginx -g 'daemon off;'
        ports:
        - name: http
          containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  ports:
  - name: http
    port: 8081
    targetPort: 80
    type: ClusterIP

7.2 Acesso mútuo

# Digite nginx para acessar o mysql
$ mysql -h mysql -uroot -ppassword
# Nota: mysql aqui é o nome do serviço MySQL, não o nome do Pod.

Acho que você gosta

Origin blog.csdn.net/weixin_53678904/article/details/132308877
Recomendado
Clasificación