Kubernetes – App wird nicht im Browser angezeigt

Kubernetes – App wird nicht im Browser angezeigt

Ich habe meinen eigenen Cluster mit Kubespray in der Google Cloud eingerichtet: 1 Master, 1 Knoten. Ich habe darauf eine Jenkins-App gestartet. Die App wird nicht im Browser angezeigt, obwohl alles korrekt zu sein scheint. Mein Dienst und meine Bereitstellung (aus einem Artikel im Internet kopiert, damit ich keine potenziellen Fehler einführe):

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

Alles sieht so aus, wie Sie es erwarten. Führen Sie kubectl get pods aus und sehen Sie, ob es ausgeführt wird:

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

Führen Sie ein „kubectl get svc“ für den Nodeport aus:

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

Wenn ich <worker node ip>:31794 besuche, passiert nichts. Ich habe die Ports auf dem Worker-Knoten überprüft und sogar 30000-32767 auf dem Worker-Knoten vorsichtshalber manuell geöffnet (durch Ausführen von: sudo iptables -A INPUT -p tcp --dport 30000:32767). Führen Sie ein sudo netstat -tulpn | grep LISTEN aus, um zu überprüfen, ob der Knotenport 31794 geöffnet ist:

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

31794 ist also eindeutig auf dem Worker-Knoten geöffnet. Warum kann ich dann im Browser nicht auf Jenkins zugreifen? Alles scheint in Ordnung zu sein.

Antwort1

In der ServiceSpezifikation müssen Sie angeben, type: LoadBalancerdass der Zugriff über den Browser zulässig ist. Wenn Sie dies tun, wird in der Ausgabe eine externe IP-Adresse angezeigt kubectl get svc.

Beachten Sie, dass type: LoadBalancerIhre App durch die Verwendung von im Internet verfügbar gemacht wird. Um dies einzuschränken, können Sie mit dem Parameter - eine Liste zulässiger IPs hinzufügen loadBalancerSourceRanges. Ihre endgültige Servicedefinition sollte ungefähr wie folgt aussehen:

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

verwandte Informationen