minikube
を使用してローカルのkubernetesクラスターを作成しています。
_webapp-rc.yaml
_ファイルを使用してReplicationController
を作成します。
_apiVersion: v1
kind: ReplicationController
metadata:
name: webapp
spec:
replicas: 2
template:
metadata:
name: webapp
labels:
app: webapp
spec:
containers:
- name: webapp
image: Tomcat
ports:
- containerPort: 8080
_
そして、ポッドのIPをstdoutに出力します。
_kubectl get pods -l app=webapp -o yaml | grep podIP
_
_podIP: 172.17.0.18
podIP: 172.17.0.1
_
curl
を使用してポッドにアクセスしたい
_curl 172.17.0.18:8080
_
しかし、標準出力は私に与えます:curl: (52) Empty reply from server
サービスを介してポッドのDockerコンテナーで自分のアプリケーションにアクセスできることを知っています。
本でこのコードを見つけます。しかし、この本はこのコードを実行するためのcontext
を提供していません。
minikube
を使用して、ホストマシンでcurlを使用してポッドIP経由でポッドにアクセスする方法
更新1
_kubectl proxy
_を使用して方法を見つけます:
_➜ ~ kubectl proxy
Starting to serve on 127.0.0.1:8001
_
そして、私はこのようにカールを介してポッドにアクセスできます:
_curl http://localhost:8001/api/v1/namespaces/default/pods/webapp-jkdwz/proxy/
_
_webapp-jkdwz
_はコマンド_kubectl get pods -l app=webapp
_で見つけることができます
更新2
_minikube ssh
_-minikube VMにログイン
そして、私は_curl <podIP>:<podPort>
_を使用できます。私の場合は_curl 172.17.0.18:8080
_です。
まず、Tomcatイメージは80ではなくポート8080を公開するため、正しいYAMLは次のようになります。
apiVersion: v1
kind: ReplicationController
metadata:
name: webapp
spec:
replicas: 2
template:
metadata:
name: webapp
labels:
app: webapp
spec:
containers:
- name: webapp
image: Tomcat
ports:
- containerPort: 8080
minikubeは仮想マシン内で実行されるため、curl 172.17.0.18:8080はその仮想マシン内からのみ機能します。
アプリを公開するサービスをいつでも作成できます。
kubectl expose rc webapp --type=NodePort
次のコマンドを使用してURLを取得します。
minikube service webapp --url
特定のポッドをクエリする必要がある場合は、 ポート転送 を使用します。
kubectl port-forward <POD NAME> 8080
または、minikubeの仮想マシンにsshして、そこからクエリを実行します。
そのコマンドは正しいですが、オーバーレイネットワークにアクセスできるマシンからのみ機能します。 (minikubeの場合、ホストマシンにはデフォルトでそれがありません)。
以下を使用して、ポッドへのプロキシを設定できます。
kubectl port-forward [name of your pod] [pod port]
その後、次のことができます(別のシェルから):
curl 127.0.0.1:port/path