minikube インストールで実行されている k8s で 2 つのサービスを実行しようとしています。Foo
サービスとがあるのでBar
、サービスにアクセスするときは、データを取得するためにFoo
サービスをトリガーする必要Bar
があります。
Foo
サービス
の展開構成は次のfoo-deployment.yaml
とおりです。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: foo-server
labels:
app: foo-server
spec:
replicas: 1
template:
metadata:
labels:
app: foo-server
serving: "true"
spec:
containers:
- name: foo-server
image: foo-container
env:
- name: BAR_SERVICE_URL
value: http://bar-server:8081
ports:
- containerPort: 8080
name: http
foo-svc.yaml
:
apiVersion: v1
kind: Service
metadata:
name: foo-server
labels:
app: foo-server
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
name: http
selector:
app: foo-server
serving: "true"
evnBAR_SERVICE_URL
変数は 内で使用されるFoo
ため、サービスは へのホストを認識しますBar
。Bar
service のサービス
構成は次のbar-svc.yaml
とおりです。
apiVersion: v1
kind: Service
metadata:
name: bar-server
labels:
app: bar-server
spec:
type: NodePort
ports:
- port: 8081
targetPort: 8081
name: http
selector:
app: bar-server
bar-deployment.yaml
:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: bar-server-v1
labels:
app: bar-server
version: "1.0"
spec:
replicas: 2
template:
metadata:
labels:
app: bar-server
version: "1.0"
serving: "true"
spec:
containers:
- name: bar-server
image: bar-container
ports:
- containerPort: 8081
name: http
Foo
minikube IP と公開されたサービス ポートを使用してサービスにアクセスすると、ポッド ログに次のエラーが表示されます。
2018-02-08 14:32:25.875 ERROR 1 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://bar-server:8081/endpoint": bar-server; nested exception is java.net.UnknownHostException: bar-server] with root cause
java.net.UnknownHostException: bar-server
ただし、bar-server/endpoint
このように minikube IP と公開ポートを使用してアクセスできますhttp://192.168.99.100:31168/endpoint
。
そのため、クラスターの外部からFoo
およびサービスにアクセスできるようです。Bar
しかし、Foo
サービスはサービス ホストを解決できず、Bar
サービス ホストにアクセスできません。
UPD : トラブルシューティングの詳細を含むいくつかの更新があります。
- アドオンで有効になっ
minikube
ています。kube-dns
Foo
Pod 側からサービス エンドポイントwget
への接続を試行しています。Bar
の IP アドレス経由ではできますが、bar-server
ではできませんbar-server:8081/endpoint
。試してみる
nslookup kubernetes.default.svc.cluster.local localhost
と良さそうです。出力は次のとおりです。サーバー: 127.0.0.1 アドレス 1: 127.0.0.1 ローカルホスト
また
dns
、ポッドが起動して実行されています。ここに出力がありますkubectl get pods -n=kube-system | grep -i dns
kube-dns-6777479f6b-vxd7m 3/3 実行中 9 1d