Capítulo 14: Kubernetes Serviço explicar

Serviço Kubernetes

Este artigo irá compartilhar as quatro áreas seguintes:

  1. Por serviço K8s;
  2. Interpretação K8S casos de uso de serviços;
  3. operação de serviço K8s e demonstração;
  4. arquitetura de serviço K8s.

demand Fonte

Por que você precisa de serviço de descoberta

Irá percorrer o pod para implantar aplicativos em um cluster K8s dentro, diferentes implantação de aplicativos tradicional, a implantação do aplicativo tradicional para implantação em uma determinada máquina acima, sabemos como chamar o endereço IP das outras máquinas. Mas aglomerado K8s que é aplicado por meio do pod de implantar e ciclo de vida pod é curto. No ciclo de vida do pod, tal como criada ou destruída, o seu endereço de IP vai mudar, então você não pode usar a implantação tradicional, você não pode especificar o acesso IP para aplicações específicas.

Também na implantação de aplicativos de antes embora aprender a implantação de modelo de implantação de aplicativos, mas ainda precisa criar um conjunto pod, então estes grupos pod precisa fornecer um acesso unificado para a entrada, e como controlar o tráfego de balanceamento de carga para o interior grupo K8s. Por exemplo, o ambiente de teste, avançar ambiente on-line e do meio ambiente, na verdade, no processo de implantação a necessidade de manter o mesmo modelos de implantação e acesso. Desde o modelo de modo que você pode usar o mesmo conjunto de aplicativos diretamente lançados em diferentes ambientes.

Serviço: Kubernetes agora de volta em serviço e balanceamento de carga

Finalmente, serviços de aplicativos precisam ser expostos para o exterior a visita, é necessário fornecer aos usuários externos a chamada. Aprendemos seção pod na rede com uma máquina não é o mesmo segmento de rede, como deixar o pod para ser exposto a uma rede externa para acessá-lo? Então você precisa de descoberta de serviços.

Em K8s dentro, descoberta de serviços e balanceamento de carga é K8s Service. A figura está em K8s na arquitetura Service, K8s serviço fornece o acesso a redes externas e pod de rede, que pode atender a rede externa de acesso, o acesso à rede pod também pode percorrer Serviço K8s.

Para baixo, K8s outro conjunto de encaixe pod, que pode equilibrar a carga para ir para um grupo de pod acima por meio de Serviço K8s, disse antes isso é equivalente a resolver problemas recorrentes ou fornecer uma entrada de acesso unificado para fazer descoberta de serviços, e depois para o acesso à rede CAN externa, acesso a solução de problemas entre pod diferente, para fornecer um endereço de acesso unificado.

Interpretação de casos de uso

Abaixo da leitura de caso de uso real, observando pod K8s de serviço para como declarar, como usar?

gramática serviço

配置文件:
apiVersion: v1
kind: Service
metadata:         # Service元信息
  name: my-service
  labels:          
    app: my-service
spec:
  selector:       # Pod选择器
    app: MyApp
  ports:
  - protocal: TCP # 协议和端口
    port: 80
    targetPort: 9376

Primeiro, olhe para uma gramática K8s Service, ea figura é na verdade uma declaração de estrutura K8s. Esta estrutura tem um monte de gramática, K8S alguns objetos padrão com descrito anteriormente têm muitas semelhanças. Por exemplo, fazer alguma seleção rótulo rótulo, seletor de fazer algumas escolhas, rótulo a declarar algumas de suas etiquetas das etiquetas.

Há um novo conhecimento, é a definição de um protocolo de descoberta de serviço para serviço K8s e do porto. Continuando com este modelo, que declarou um Serviço K8s chamado my-service, e tem um app: my-service do rótulo, ele escolheu app: MyApp um rótulo como o pod como seu backend.

Finalmente, a definição de protocolo de descoberta de serviço e a porta, neste exemplo, definir o protocolo TCP, a porta 80, a porta de destino é 9376, o efeito é o acesso a este serviço 80 portas pode ser encaminhado para TARGETPORT a extremidade traseira, é tão longo como o acesso a este serviço irá carregar saldo porta 80 para o aplicativo back-end: 9376 porto pod deste rótulo de MyApp.

Criando e Serviço de Exibição

Depois de como criar um objeto acabado de declarar este serviço, e cria que tipo de efeito? Ao comando simples:

  • kubectl apply -f service.yaml
    

ou

  • kubectl created -f service.yaml
    

O comando acima simplesmente para criar esse serviço a. Uma vez que você criou, você pode:

  • kubectl discribe service
    

Vá ver um resultado após o serviço é criado.

avatar

Após o serviço é criado, você pode ver o seu nome é o meu serviço. Namespace, Etiqueta, Selector, como os relacionados com a nossa dito antes, isto irá gerar uma declaração completa após o endereço IP, o endereço IP é o endereço IP do serviço, o endereço IP pode ser acessado por outro pod em clusters dentro, pelo equivalente endereço IP fornece um acesso unificado para a entrada de um pod e descoberta de serviços.

Há também um Endpoints de propriedade que podemos ver através Endpoints: tenham sido previamente declarados pelo selector para escolher o que pod? O que são estes pod e um estado? Por exemplo, por meio de seletor, vemos que ela escolheu uma porta de um IP estes pod e TARGETPORT estes pod declarou.

avatar

A arquitectura actual, como mostrado na FIG. Após o serviço é criado, ele cria um endereço IP virtual e porta em clusters dentro do cluster, todo o pod e nó estão disponíveis através de tal endereço IP e porta de acesso a este serviço. O serviço irá selecionar o pod e seu endereço IP são montados na extremidade traseira. Quando este acesso pelo serviço de endereço IP, você pode ir para o balanceamento de carga de back-end destes pod acima.

Quando não há um ciclo de vida mudança vagem, por exemplo, onde uma cápsula destruída, o serviço será removido automaticamente a partir da extremidade traseira da vagem. Isto consegue: Mesmo pod mudanças de ciclo de vida, o ponto final é o acesso não vai mudar.

aglomerado Serviço de Acesso

Em um cluster dentro do outro pod de como o acesso a este serviço que criou? Há três maneiras:

  • Em primeiro lugar, podemos ir acessado através de um serviço de IP virtual, por exemplo my-service este serviço que você acabou de criar, por kubectl get SVC ou serviço kubectl Discribe pode ver seu endereço IP virtual é 172.29.3.27, a porta 80, e, em seguida, este serviço pode ser acessado através do endereço IP virtual e porta diretamente dentro do pod.
  • A segunda maneira de acessar diretamente o nome do serviço, contando com a resolução DNS é o mesmo namespace no pod pode ir diretamente para o acesso a este serviço acaba de declarar pelo nome do serviço. Diferente namespace dentro, podemos adicionar pelo nome do serviço, então o que namespace além de serviço, onde a aceder a este serviço, por exemplo, usamos onda para acessar diretamente, isto é, o meu serviço "": 80 você pode ter acesso a este serviço.
  • O terceiro é acessado através de uma variável de ambiente, no mesmo namespace no início pod, K8s atenderá alguns dos endereços IP, porta e alguma configuração simples, o pod em K8s interior por meio de variáveis de ambiente. Depois do recipiente de partida K8s vagem, excepto no interior de uma configuração de serviço endereço espaço de nomes de leitura, ou a variável de ambiente do sistema como a leitura seu número de porta. Por exemplo, em um dentro do cluster pod, você pode direcionar $ tomadas por curl para o valor de uma variável de ambiente, como a tomada de MY_SERVICE_HOSTé que é um endereço IP, MYSERVICE é apenas MYSERVICE nossa declaração, serviço portuário é o seu número da porta, o que também você pode solicitar a agrupar MY_SERVICE dentro deste serviço.

Serviço Headless

Há uma forma especial de serviço é Headless Service. Você pode especificar quando o serviço é criado clusterIP: Nenhum, que eu não preciso dizer a K8s clusterIP (mencionado anteriormente é um cluster dentro de um IP virtual), e depois K8S este serviço não será atribuído a um endereço IP virtual, ele não tem um endereço IP virtual como fazer o balanceamento de carga e acesso unificado para a entrada dele?

Ele é operado: pod pode ser diretamente resolvido por uma forma service_name DNS para a extremidade traseira do pod todos os endereços IP, resolve todos os endereços extremidade traseira Pod registrados no sistema DNS A, selecionada pelo cliente uma extremidade traseira endereço IP, o registro vai mudar com o ciclo de vida do pod, retornou uma lista de registros também mudou, isso requer uma aplicação cliente de todo o DNS um registro para retornar à lista de qual endereço IP um registro do cliente -se a escolher um endereço apropriado para acessar o pod.

avatar

Você pode ver no gráfico com apenas sobre a diferença entre a nossa declaração modelo, está no meio de um clusterIP: Nenhum, indicam que nenhum IP virtual. O efeito real é o pod ao acessar o meu serviço, resolve o serviço de cluster diretamente a todos o endereço IP correspondente do pod, e voltou para o pod, então pod dentro de si para seleccionar um endereço IP para ser acessado diretamente.

Serviço é exposta para o exterior do cluster

Apresentado na frente de todos ou nó pod no cluster para aceder ao interior, serviço para fora como para expô-lo? Como a aplicação realmente expostos ao público para visitá-lo? Aqui, existem dois tipos de serviço para resolver este problema, um é NodePort, um é LoadBalancer.

  • NodePort maneira é no nó de topo do núcleo (isto é, acima do nó de cluster hospedeiro) exposto a uma porta no nó, isto é equivalente a porta depois de uma visita ao nó superior irá em seguida, fazer uma para a frente, para a frente endereço IP virtual acima é apenas acima do endereço IP virtual host de serviço.
  • LoadBalancer tipo que é a camada NodePort acima para fazer a conversão, apenas disse NodePort é, na verdade, uma porta no interior de cada nó de cluster acima, e LoadBalancer está ligada a um equilibrador de carga à frente de todos os nós. Por exemplo, uma nuvem pendurou SLB Ali, o balanceador de carga irá fornecer uma entrada unificada, e colocá-lo todos acessíveis ao tráfego de balanceamento de carga para ir nó pod cada nó de cluster acima. Então pod nó reconvertido ClusterIP, para visitar o pod real acima.

Operação e demonstração

Aqui, a operação real e demonstração, serviços Ali nuvem em cima do recipiente para a experiência como usar K8s Service.

Criação de Serviço

Nós criamos um cluster recipiente Ali nuvem e, em seguida, configurar uma conexão com o cluster terminal local recipiente Ali nuvem.

Primeiro, por kubectl get cs, você pode ver que temos adequadamente ligado a um recipiente de cluster em cima de Ali serviços em nuvem vão.

avatar

Hoje vai realmente passar pela experiência de serviços em nuvem Ali em cima desses modelos para usar K8s Service. Há três modelos, primeiro cliente, ele é usado para serviço de simular o acesso K8s através do serviço, e em seguida, carregar o equilíbrio a um grupo de pod dentro de nosso serviço para a declaração.

avatar

Acima K8s Service, com a apenas introduziu, criamos um modelo K8s Service, que pod, Serviço K8s será especificado pela carga front-end equilibrar a porta 80 para a porta 80 no topo da extremidade traseira do pod, e selecione o seletor para executar: nginx esta tag alguns dos pod como seu backend.

avatar

E, em seguida, para criar um grupo com tais rótulos pod por pod para criar o que é? K8s é introduzido antes da implantação, podemos facilmente criar um conjunto de implantação por pod, então o acima run declaração: esse rótulo um nginx, e tem duas cópias, ele vai sair ao mesmo tempo dois pod.

avatar

Criar um conjunto de pod, é para criar a implantação K8s, por kubectl criar service.yaml -f. A implantação também criou, olhar para o que não criou fora do pod. Veja a figura abaixo dois pod essa implantação foram criados na corrida. Os endereços IP podem ser vistos por kubectl get pod -o largura. Por -l, nomeadamente rotular a fazer o rastreio, execute = nginx. Como mostrado abaixo pode ser visto, estes são os dois pod 10.0.0.12 10.0.0.135 e tal endereço IP, e todos com run = nginx da etiqueta.

avatar

Vamos criar o serviço K8s, é escolher apenas introduziu dois pod através do serviço. Este serviço foi criado.

avatar

De acordo com relatórios anteriores, você pode ver o status atual do serviço através de um kubectl descrever svc. Como mostrado abaixo, serviço nginx apenas criado, a sua selecção é executado = nginx, seleccionado pela extremidade traseira do pod de execução = nginx selector de endereço é apenas visto que o endereço duas pod: 10.0.0.12 e 10.0.0.135. Aqui você pode ver K8s pois gera um cluster dentro de um endereço IP virtual, através do endereço IP virtual, ele pode carregar o equilíbrio para voltar acima de dois pod.

avatar

Agora para criar pod real de um cliente a se sentir como acessar o Serviço K8s, temos que criar um pod cliente client.yaml, kubectl get pod pod pode ver que o cliente foi criado e está em operação a.

avatar

Por kubectl exec para o interior pod para o pod de se sentir só disse três vias de acesso, antes de tudo, pode ir diretamente para acessar esta K8s como ele gera o ClusterIP, é o endereço IP virtual, o acesso a onda endereço IP, este pod que não estejam equipados com a onda. Wget através do endereço IP, entrar no teste. Você pode ver o endereço IP real é acessível a nginx em cima da extremidade traseira da visita para passar, esta é uma entrada unificada virtual.

avatar

A segunda maneira, você pode ir para acessar o serviço por meio de nome do serviço direto. Também por wget, nomes de serviços de acesso nginx que acabamos de criar, pode ser encontrado com apenas viu os resultados são os mesmos.

avatar

Quando um namespace diferente, vá para o serviço também pode ser acessado através da adição do nome de um namespace, como namespace aqui é padrão.avatar

Finalmente, apresentamos o método de acesso que também pode ser acessado indo variável de ambiente no interior pod executando o comando env para vê-lo realmente injetado diretamente sobre a situação da variável de ambiente. Nginx olhada várias configurações foram registrados serviço veio.

avatar

Você também pode ir para visitar uma variável de ambiente por wget, então você pode ter acesso a um dos nosso serviço.

avatar

Introdução aos três métodos de acesso, vamos olhar para a forma de acessar o serviço através de redes externas. Nós Vim modificar diretamente algum serviço recém-criado.

avatar

Finalmente, adicionar um tipo, é LoadBalancer, a maneira que nós descrevemos o acesso externo mais cedo.

avatar

Então kubectl aplicar, então, basta colocar as alterações tenham efeito no conteúdo de serviço diretamente dentro do criado.

avatar

Agora olhe para o serviço, o que acontece com ele? Por kubectl get svc -o ampla, encontramos serviço nginx acabou de criar mais uma EXTERNO-IP, um endereço IP é acessível externamente, que acabamos visitou são CLUSTER-IP, é os endereços IP virtuais em um dentro do cluster .

avatar

Agora e depois de visitar o olhar real neste endereço IP externo 39.98.21.187, sinto por como expor nossos serviços de aplicação de serviço, diretamente dentro do tap terminal, onde você pode nos ver através desta aplicações de terminais de acesso externos diretos podem acessar este serviço, não é muito simples?

avatar

Finalmente, olhar para o que os K8s com serviço para atingir a descoberta de serviços, o serviço é o endereço de acesso com o ciclo de vida do pod não importa. Nós olhamos para o serviço atual é selecionado por trás do endereço IP dois pod.

avatar

Vamos agora colocar um pod eliminado por kubectl forma de exclusão para a frente de um pod excluído.

avatar

Sabemos que a implantação irá torná-lo gera automaticamente um novo pod, agora ver o endereço IP tornou-se 137.

avatar

Agora vá para descrever o que acabou de serviço, como mostrado abaixo, ver o ponto final de acesso frontal é o endereço IP do cluster não mudou, endereço IP externo LoadBalancer não mudou. Em todo o acesso sem afetar o cliente, um serviço de IP pod back-end foi colocado automaticamente dentro da extremidade traseira.

avatar

Isso é equivalente aos componentes do aplicativo não pode chamar em causa uma mudança no ciclo de vida do pod.

Estas são todas as apresentações.

projeto de arquitetura

Finalmente, uma análise simples do design K8s e alguns realização do princípio.

Kubernetes arquitetura descoberta de serviços

avatar

Como mostrado acima, K8s K8s Serviço e descoberta de serviços é uma arquitetura de todo.

K8s dividida mestre nó e dos trabalhadores nós:

  • que é principalmente K8s gestão conteúdo mestre e controlo;
  • Um nó trabalhador local, que é o usuário real a execução do aplicativo.

No nó mestre K8s que tem APIServer, é para unificar o gerenciamento de locais K8S todos os objetos, todos os componentes estão registrados para escutar alterações para este objeto APIServer acima, por exemplo, temos apenas o ciclo de vida de componentes pod muda esses eventos.

Não é o mais crítico em três componentes:

  • Um deles é o controlador Gestor Nuvem, responsável por LoadBalancer para configurar um balanceador de carga para ir acesso externo;
  • DNS outra é Coredns, é observar uma mudança no serviço de back-end dentro do pod de APIServer por Coredns, para configurar a determinação do serviço para alcançá-lo pode ser acessado diretamente através do nome do serviço para o serviço de IP virtual, ou o tipo Headless of Service resolver lista de IP;
  • Cada nó em seguida, haverá kube-proxy este componente, é ouvindo a mudança de serviço e pod, e então realmente ir para dentro do pod configuração de cluster do nó ou endereço IP de uma visita virtual.

O link de acesso real é o que? Por exemplo, para acessar o serviço de um cluster interna Cliente Pod3, semelhante ao efeito de apenas uma demonstração. Depois Cliente Pod3 pela primeira vez por Coredns aqui para analisar a ServiceIP, Coredns vai voltar ao que ServiceName correspondente serviço de IP, este Pod3 Cliente terá esta solicitação IP Serviço de fazer, é um pedido para um host de rede, ele será iptables é configurado kube-proxy ou IPVS fazer um processamento de intercepção, o equilíbrio de carga para após um verdadeiro back-end para cada vagem acima, conseguindo-se assim um equilíbrio de carga e de descoberta de serviço.

Para tráfego externo, um pedido de acesso público apenas pelo exemplo. Após isso é através de um balanceador de carga externo Cloud Controller Manager para monitorar a mudança de serviço, para configurar um balanceador de carga, em seguida, encaminhado para um nó ao NodePort acima, também através de uma configuração NodePort kube-proxy de um iptables, o tráfego converter em NodePort ClusterIP, seguido de conversão para o endereço IP do back-end de um pod, fazer o balanceamento de carga e descoberta de serviços. Esta é toda a descoberta de serviços K8s e a estrutura geral K8s Service.

Follow-up Avançada

Em seguida, siga a seção Avançado iremos explicação mais aprofundada da realização do princípio Serviço K8s, e depois de problemas de rede de serviços, como diagnosticar e habilidades de reparação.

Esta secção resume

O principal conteúdo desta lição para parar aqui, brevemente resumir aqui:

  1. Por nuvem cena nativa requer a descoberta de serviços e balanceamento de carga,
  2. Como usar Kubernetes em Kubernetes fazer serviço no Serviço de descoberta e balanceamento de carga
  3. Serviço de Cluster Componentes Kubernetes e provavelmente relacionadas com a realização do princípio da

Acredito que depois de aprender Nesta seção, será capaz de aplicações empresariais complexas de forma rápida e disposição padrão por serviço Kubernetes.

Acho que você gosta

Origin www.cnblogs.com/passzhang/p/12544597.html
Recomendado
Clasificación