Kubernetes – Aplicativo não aparece no navegador

Kubernetes – Aplicativo não aparece no navegador

Eu configurei meu próprio cluster usando Kubespray no Google Cloud: 1 mestre, 1 nó. Eu lancei um aplicativo Jenkins nele. O aplicativo não aparece no navegador, embora tudo pareça estar correto. Meu serviço e implantação (copiado do artigo na internet para não introduzir possíveis erros):

apiVersion: v1
kind: Service
metadata:
  name: jenkins
spec:
  type: NodePort
  ports:
    - port: 8080
      targetPort: 8080
  selector:
    app: jenkins
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: jenkins
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      containers:
        - name: jenkins
          image: jenkins/jenkins
          env:
            - name: JAVA_OPTS
              value: -Djenkins.install.runSetupWizard=false
          ports:
            - name: http-port
              containerPort: 8080
            - name: jnlp-port
              containerPort: 50000

Tudo parece como você esperaria. Execute um kubectl get pods e veja se ele está em execução:

NAME                      READY   STATUS    RESTARTS   AGE
jenkins-b64d4d96d-4vj48   1/1     Running   0          22m

Execute um kubectl get svc para o nodeport:

NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
jenkins      NodePort    10.233.28.168   <none>        8080:31794/TCP   25m
kubernetes   ClusterIP   10.233.0.1      <none>        443/TCP          11h

Se eu visitar <worker node ip >:31794 nada aparece. Eu verifiquei as portas no nó de trabalho, até abri manualmente 30000-32767 no nó de trabalho para garantir (executando: sudo iptables -A INPUT -p tcp --dport 30000:32767). Execute um sudo netstat -tulpn | grep LISTEN para verificar se o nodeport 31794 está aberto:

tcp6       0      0 :::10256                :::*                    LISTEN      9580/kube-proxy     
tcp6       0      0 :::80                   :::*                    LISTEN      1200/apache2        
tcp6       0      0 :::31794                :::*                    LISTEN      9580/kube-proxy     
tcp6       0      0 :::22                   :::*                    LISTEN      1428/sshd

Então, claramente, 31794 está aberto no nó de trabalho. Por que então não consigo acessar o Jenkins no navegador? Tudo parece em ordem.

Responder1

Nas Serviceespecificações, você deve mencionar type: LoadBalancerpara permitir o acesso do navegador. Ao fazer isso, você verá um IP externo aparecendo na kubectl get svcsaída.

Observe que o uso type: LoadBalancerexporá seu aplicativo à Internet. Para restringir isso, você pode adicionar uma lista de IPs permitidos usando o parâmetro - loadBalancerSourceRanges. Sua definição final de serviço deve ser algo como abaixo

apiVersion: v1
kind: Service
metadata:
  name: jenkins
spec:
  type: NodePort
  ports:
    - port: 8080
      targetPort: 8080
  selector:
    app: jenkins
  type: LoadBalancer
  # Restrict access to this LoadBalancer to the below ips
  loadBalancerSourceRanges:
  - 100.100.100.100/32
  - 1.1.1.2/32

informação relacionada