Kubernetes - 앱이 브라우저에 표시되지 않음

Kubernetes - 앱이 브라우저에 표시되지 않음

Google Cloud에서 Kubespray를 사용하여 마스터 1개, 노드 1개로 자체 클러스터를 설정했습니다. 젠킨스 앱을 시작했습니다. 모든 것이 올바른 것으로 보이는데도 앱이 브라우저에 표시되지 않습니다. 내 서비스 및 배포(잠재적인 오류가 발생하지 않도록 인터넷 기사에서 복사):

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

모든 것이 예상대로 보입니다. kubectl get pods를 실행하고 실행 중인지 확인합니다.

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

nodeport에 대해 kubectl get svc를 실행합니다.

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

<worker node ip>:31794를 방문하면 아무 것도 나타나지 않습니다. 작업자 노드의 포트를 확인했고, 만일을 대비해 작업자 노드에서 30000-32767을 수동으로 열었습니다(Sudo iptables -A INPUT -p tcp --dport 30000:32767 실행). sudo netstat -tulpn 실행 | grep LISTEN을 사용하여 nodeport 31794가 열려 있는지 확인합니다.

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가 작업자 노드에 열려 있습니다. 그렇다면 브라우저에서 젠킨스에 액세스할 수 없는 이유는 무엇입니까? 모든 것이 순조롭게 보입니다.

답변1

사양 에는 브라우저에서 액세스를 허용하도록 Service언급해야 합니다 . type: LoadBalancer이렇게 하면 kubectl get svc출력에 외부 IP가 나타나는 것을 볼 수 있습니다.

type: LoadBalancer를 사용하면 앱이 인터넷에 노출된다는 점에 유의하세요 . 이를 제한하려면 - 매개변수를 사용하여 허용 가능한 IP 목록을 추가할 수 있습니다 loadBalancerSourceRanges. 최종 서비스 정의는 아래와 같아야 합니다.

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

관련 정보