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