事象
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: nginxlabelに指定した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の結びつきに失敗しているところを疑う必要があります。同様の事象の調査に参考になれば幸いです。