(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Kubernetes】nginxのPodへのcurlがEmpty reply from serverとなる事象

スポンサーリンク

事象

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