Um Kubernetes Service
pode ter um targetPort
e port
na definição de serviço:
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
Qual é a diferença entre the port
e targetPort
?
service
kubernetes
port
Jacob
fonte
fonte
Respostas:
Serviço: direciona o tráfego para um pod.
TargetPort: Essa é a porta real na qual seu aplicativo está sendo executado dentro do contêiner.
Porta: algumas vezes seu aplicativo dentro do contêiner atende a diferentes serviços em uma porta diferente.
Exemplo: O aplicativo real pode ser executado
8080
e as verificações de integridade desse aplicativo podem ser executadas na8089
porta do contêiner. Portanto, se você clicar no serviço sem porta, ele não saberá para qual porta do contêiner deve redirecionar a solicitação. O serviço precisa ter um mapeamento para poder atingir a porta específica do contêiner.se você acertar o
my-service:8089
tráfego é roteado para8080
o contêiner (targetPort). Da mesma forma, se você pressionarmy-service:8443
, ele será redirecionado para8085
o contêiner (targetPort). Mas issomyservice:8089
é interno ao cluster kubernetes e pode ser usado quando um aplicativo deseja se comunicar com outro aplicativo. Portanto, para atingir o serviço de fora do cluster, alguém precisa expor a porta na máquina host na qual o kubernetes está sendo executado, para que o tráfego seja redirecionado para uma porta do contêiner. Esta énode port
(porta exposta na máquina host). No exemplo acima, você pode acessar o serviço de fora do cluster (Postman ou qualquer outro cliente restante)host_ip:nodePort
Digamos que seu ip máquina host é
10.10.20.20
que você pode bater os http, métricas, serviços de saúde por10.10.20.20:30475
,10.10.20.20:31261
,10.10.20.20:30013
.Edições: Editadas de acordo com o comentário de Raedwald .
fonte
port
etargetPort
ser diferente? Então, por exemplo, olhando para o seuhealth
exemplo, por que fazer oport
8443
invés de8085
? Basicamente, por que existem dois parâmetros em vez de apenas expor todos ostargetPort
s no serviço?Isso me ajuda a pensar nas coisas da perspectiva do serviço .
nodePort
: A porta no nó em que o tráfego externo entraráport
: A porta deste serviçotargetPort
A porta de destino no (s) pod (s) para encaminhar o tráfego paraO tráfego é
nodePort
ativado e encaminhado paraport
o serviço que é direcionado paratargetPort
o pod (s).Vale enfatizar mais
nodePort
o tráfego externo. Outros pods no cluster que talvez precisem acessar o serviço serão usados apenasport
, nãonodePort
como acesso interno apenas ao serviço.Também é importante notar que, se
targetPort
não estiver definido, o padrão será o mesmo queport
. Por exemplo,80:80
para porta de serviço80
direcionada à porta do contêiner80
.fonte
port
etargetPort
. Você realmente limpou a confusão.A resposta dada acima por @Manikanta P está correta. No entanto, a explicação de "Port" pode ser um pouco incerta na primeira leitura. Vou explicar com um exemplo:
Considere um aplicativo da Web com seu conteúdo estático (primeira página, imagens etc.) hospedado pelo httpd e o conteúdo dinâmico (por exemplo, resposta a solicitações etc.) hospedado pelo tomcat. O servidor da Web (ou o conteúdo estático) é servido pelo httpd na porta
80
enquanto o Appserver (ou o conteúdo dinâmico) é servido pelo tomcat na porta8080
.O que um desenvolvedor deseja: O usuário deve poder acessar o servidor da Web de fora, mas não o Appserver de fora.
Solução: o tipo de serviço do servidor da Web em seu service.yml será NodePort, enquanto o tipo de serviço do Appserver em seu service.yml será o ClusterIP.
Código para service.yml do servidor da web:
Código para service.yml do Appserver
Observe também que, no
httpd.conf
arquivo do servidor da Web, escreveremos o IP que redireciona a solicitação de um usuário para o servidor de aplicativos. Este IP será:host_IP:5050
.O que exatamente está acontecendo aqui? Um usuário escreve
hostIP:30475
e vê a página do servidor da Web. Isso ocorre porque ele está sendo atendido pelo httpd na porta80
(targetport). Quando um usuário clica em um botão, é feita uma solicitação. Essa solicitação é redirecionada para o Appserver porque, nohttpd.conf
arquivo, a porta5050
é mencionada e é a porta na qual o contêiner do Appserver e o servidor de conteúdo da Web se comunicam internamente. Quando o appserver recebe a solicitação, ele pode atendê-la devido ao tomcat sendo executado dentro dele na porta8080
.fonte
httpd.conf
"porque no arquivo httpd.conf, a porta 5050 é mencionada"Esta resposta é para referenciar a documentação do Kubernetes, além das outras respostas:
https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/ :
https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/ :
fonte
Em poucas palavras
nodeport:
Escuta solicitação externa em todos os nós do trabalhador em nodeip: port e encaminha a solicitação para a porta.port:
Porta interna do serviço de cluster para contêiner e escuta a solicitação de entrada da nodeport e encaminhada para targetPort.targetPort:
Receba a solicitação do porto e encaminha para o pod de contêiner (porto) onde está escutando. mesmo se você não especificar, será atribuído por padrão os mesmos números de porta que a porta.fonte
"Porta de destino" é a porta na qual seu contêiner está em execução.
Porta: a porta redireciona o tráfego para o contêiner do serviço.
Expondo a implantação
NodePort: é a porta que permite que o serviço acesse externamente.
Espero que isso responda.
fonte
se o contêiner ouvir na porta 9376, targetPort : 9376
se um serviço escutar na porta 80, porta : 80
Em seguida, a configuração das portas de serviço é exibida abaixo
Por fim, a solicitação recebida na porta do serviço e encaminhada no targetPort do pod.
fonte