Google Cloud で Kubespray を使用して独自のクラスターをセットアップしました: マスター 1 台、ノード 1 台。Jenkins アプリを起動しました。すべてが正しいように見えても、アプリはブラウザーに表示されません。私のサービスとデプロイメント (潜在的なエラーが発生しないように、インターネットの記事からコピーしました):
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
ノードポートに対して 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
< ワーカー ノード IP >:31794 にアクセスしても何も表示されません。ワーカー ノードのポートをチェックし、念のためワーカー ノードの 30000 ~ 32767 を手動で開きました (sudo iptables -A INPUT -p tcp --dport 30000:32767 を実行)。sudo netstat -tulpn | grep LISTEN を実行して、ノード ポート 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 はワーカー ノード上で開いているのは明らかです。では、なぜブラウザーで Jenkins にアクセスできないのでしょうか? すべて正常なようです。
答え1
仕様ではService
、ブラウザからのアクセスを許可するように記述する必要がありますtype: LoadBalancer
。これを行うと、出力に外部 IP が表示されますkubectl get svc
。
を使用すると、アプリがインターネットに公開されることに注意してください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