Kubernetes Githubリポジトリでゲストブックの例を実行しようとしましたが、ローカルホストからこのサービスにアクセスできません。私のテスト環境は、CloudStackによってプロビジョニングされた2台の仮想マシン(CentOS7を使用)で構成されており、OpenShiftOriginがインストールされています。これがサービスリストです:
[root@openshift-master AMD64]# ./oc get svc
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
docker-registry 172.30.39.251 <none> 5000/TCP 1d
guestbook 172.30.55.125 nodes 3000/TCP 56m
kubernetes 172.30.0.1 <none> 443/TCP,53/UDP,53/TCP 1d
redis-master 172.30.24.94 <none> 6379/TCP 1h
redis-slave 172.30.132.250 <none> 6379/TCP 1h
router 172.30.33.117 <none> 80/TCP,443/TCP,1936/TCP 1d
公開されているサービスはゲストブックです。サービスゲストブックの説明は次のとおりです。
[root@openshift-master AMD64]# ./oc describe svc guestbook
Name: guestbook
Namespace: default
Labels: app=guestbook
Selector: app=guestbook
Type: NodePort
IP: 172.30.55.125
Port: <unset> 3000/TCP
NodePort: <unset> 30642/TCP
Endpoints: 172.17.0.6:3000,172.17.0.7:3000,172.17.0.8:3000
Session Affinity: None
No events.
私が行った場合:
curl 172.30.55.125:3000
ゲストブックポッドをホストするノード、クラスター内の他のノード、および私のホストマシン(192.168.1.2)からのみ機能します。機能しません。
CloudStackですべてのポートを開きました。そうしないと、ノードをsshできず、ノードで次のファイアウォールルールを設定します。
firewall-cmd --permanent --zone=public --add-port=30642/tcp
30642はNodePortであり、クラスター外から到達するために必須です。解決する方法について何か考えがありますか?前もって感謝します。
curl 172.17.0.6:3000
(つまり、各Endpoints
アドレス)は、すべてのクラスターノードから直接使用できる必要があります。それが機能しない場合は、クラスターネットワークが正しく設定されていません。これには、あるノードから別のノードに送信されたパケットをフィルタリングするファイアウォールまたはSDNが含まれる可能性があります。
172.30.55.125:3000
は、すべてのクラスターノードのiptables
リストにエントリがあり、各クラスターノードのローカルkube-proxy
デーモンによって維持されている必要があります。リモートエンドポイントのカーリングは機能するが、サービスの仮想IPとポートの使用が失敗する場合は、kube-proxy
が機能していない可能性があります。 iptablesエントリ、プロセスステータス、およびログファイルを確認してください。
最後に、ゲストブックアプリが実際に接続を受信している可能性がありますが、運命の逆引きDNSルックアップを試行している間、ゲストブックアプリは中止またはブロックしています。