事象
Kubernetesにて立ち上げ済のnignxのPod&サービスを利用してcurlコマンドで接続を行うも以下エラーになる。
$ curl localhost curl: (52) Empty reply from server
接続ポート(80)に誤りはなく
> kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ... nginx LoadBalancer 10.X.X.X localhost 80:31029/TCP ..
別ポートに接続すると別のエラーになるためServiceは問題なく立ち上がっている。
$ curl localhost:8888 curl: (7) Failed to connect to localhost port 31856: Connection refused
原因/解決策
サービスが指定している接続先情報とPodに指定しているラベルが異なっていた。
以下はServiceのyamlの抜粋で
spec: type: LoadBalancer selector: app: nginx
以下がPodのyamlの抜粋
metadata: name: nginx-pod labels: app: nginx-test spec: containers: - name: nginx image: nginx
labelに指定したappが異なっている部分を揃えると解決した。
$ curl localhost <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> ...
以下、補足です。
補足
かなり初歩的なミスですが、気づかなければ時間がかかるところなのでメモに残しておきます。
まず調査方法としては立ち上げているPodのlogを見ることです。
> kubectl logs nginx-pod
何も表示されません。が、nginx-podのログは標準出力に出るようになっています。
root@nginx-pod:/var/log/nginx# ls -l total 0 lrwxrwxrwx 1 root root 11 Apr 23 13:02 access.log -> /dev/stdout lrwxrwxrwx 1 root root 11 Apr 23 13:02 error.log -> /dev/stderr
よってServiceとPodの結びつきに失敗しているところを疑う必要があります。同様の事象の調査に参考になれば幸いです。