Kubernetes, flanela e serviços de exposição

1

Eu tenho uma configuração de kubernetes funcionando bem, mas não consigo expor serviços externamente. Estou a pensar que a minha rede não está configurada corretamente:

  • endereços dos serviços do kubernetes: --service-cluster-ip-range=172.16.0.1/16

  • configuração de rede de flanela: etcdctl get /test.lan/network/config {"Network":"172.17.0.0/16"}

  • configuração da sub-rede do docker: --bip=10.0.0.1/24

  • IP do hostnode: 192.168.4.57

Eu tenho o serviço nginx em execução e tentei expor da seguinte forma:

[root@kubemaster ~]# kubectl get pods
NAME          READY     STATUS    RESTARTS   AGE
nginx-px6uy   1/1       Running   0          4m
[root@kubemaster ~]# kubectl get services
NAME         LABELS                                    SELECTOR    IP(S)           PORT(S)    AGE
kubernetes   component=apiserver,provider=kubernetes   <none>      172.16.0.1      443/TCP    31m
nginx        run=nginx                                 run=nginx   172.16.84.166   9000/TCP   3m

e expus o serviço assim:

kubectl expose rc nginx --port=9000 --target-port=9000 --type=NodePort
NAME      LABELS      SELECTOR    IP(S)     PORT(S)    AGE
nginx     run=nginx   run=nginx             9000/TCP   292y

Espero que agora consiga chegar ao contêiner nginx no IP do hostnodes ( 192.168.4.57 ) - eu entendi mal a rede? Se eu tiver, a explicação pode ser apreciada: (

Nota: Isso é feito em hardware físico, sem nenhum provedor de nuvem, desde que o balanceador de carga, por isso, o NodePort é a única opção que eu tenho, eu acho?

    
por jaxxstorm 18.12.2015 / 19:12

3 respostas

0

I'm expecting now to be able to get to the nginx container on the hostnodes IP (192.168.4.57) - have I misunderstood the networking? If I have, can explanation would be appreciated :(

Espere ler o pod no hostIP: NodePort, onde você pode encontrar a porta do nó de um serviço com:

kubectl get svc echoheaders --template '{{range .spec.ports}}{{.nodePort}}{{end}}'

Note: This is on physical hardware with no cloud provider provided load balancer, so NodePort is the only option I have, I think?

Você pode implantar um controlador de entrada, como: link ou link

    
por 28.06.2016 / 23:04
0

Um serviço NodePort é a solução mais comum para um cluster bare-metal local / pequeno, e a mesma porta estará disponível em todos os nós em que suas tarefas estão em execução (isto é, provavelmente não em seus nós mestre) executando kube-proxy .

Existem alguns código contrib / not-obvious que funcionam como um LoadBalancer para redes menores de modo que, se você quiser usar o tipo: LoadBalancer localmente e na nuvem, poderá obter mecanismos equivalentes, se isso for importante.

Os controladores Ingress se tornam significativamente úteis sobre NodePorts quando você deseja misturar e combinar serviços (especificamente serviços HTTP) expostos de seu cluster na porta 80 ou 443 e são criados para suportar especificamente mais de um serviço por meio de um único endpoint (e potencialmente , uma única porta - mapeada para separar caminhos URI ou semelhantes). Controladores Ingress não ajudam muito quando o acesso que você deseja não é baseado em HTTP (por exemplo, um serviço baseado em soquete, como Redis ou MongoDB, ou talvez algo personalizado que você esteja fazendo)

Se você estiver integrando isso em um projeto de TI interno, muitos balanceadores de carga comercial recomendam que as configurações do NodePort sejam feitas com sua própria tecnologia de balanceamento de carga e façam referência ao pool de todos os nós de trabalho nessa configuração. A F5 tem um exemplo razoável disso em sua documentação.

    
por 27.10.2017 / 18:42
0

Você não precisa usar o NodePort e não precisa usar o balanceador de carga externo. Apenas dedique alguns dos nós do cluster a serem nós do balanceador de carga. Você os coloca em um grupo de nós diferente, dá a eles alguns rótulos: mynodelabel/ingress: nginx , e então você hospeda um daemonset de ingresso nginx naquele grupo de nós.

As opções mais importantes são:

spec:
  restartPolicy: Always
  dnsPolicy: ClusterFirst
  hostNetwork: true
  nodeSelector:
    mynodelabel/ingress: nginx

e

      ports:
        - containerPort: 80
          hostPort: 80
        - containerPort: 443
          hostPort: 443

Opcionalmente, você pode contaminar os nós do balanceador de carga para que os pods comuns não funcionem neles e diminuam o nginx.

    
por 29.10.2017 / 11:37