Kubernetes: la aplicación no se muestra en el navegador

Kubernetes: la aplicación no se muestra en el navegador

Configuré mi propio clúster usando Kubespray en Google Cloud: 1 maestro, 1 nodo. Lancé una aplicación jenkins. La aplicación no aparece en el navegador aunque todo parece estar correcto. Mi servicio e implementación (copiado del artículo en Internet para no introducir ningún error potencial):

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

Todo luce como era de esperar. Ejecute un kubectl get pods y vea que se está ejecutando:

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

Ejecute un kubectl get svc para el 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

Si visito <IP del nodo trabajador>:31794 no aparece nada. Verifiqué los puertos en el nodo trabajador, incluso abrí manualmente 30000-32767 en el nodo trabajador por si acaso (ejecutando: sudo iptables -A INPUT -p tcp --dport 30000:32767). Ejecute un sudo netstat -tulpn | grep ESCUCHE para verificar que el nodeport 31794 esté abierto:

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

Claramente 31794 está abierto en el nodo trabajador. ¿Por qué entonces no puedo acceder a jenkins en el navegador? Todo parece en orden.

Respuesta1

En la Serviceespecificación, debes mencionar type: LoadBalancerpermitir el acceso desde el navegador. Cuando haga esto, verá una IP externa en kubectl get svcla salida.

Tenga en cuenta que el uso type: LoadBalancerexpondrá su aplicación a Internet. Para restringir eso, es posible que desee agregar una lista de IP permitidas usando el parámetro - loadBalancerSourceRanges. Su definición final de Servicio debería ser similar a la siguiente

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

información relacionada