<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>trouble-shooting on takac.dev</title>
    <link>https://takac.dev/categories/trouble-shooting/</link>
    <description>Recent content in trouble-shooting on takac.dev</description>
    <generator>Hugo -- gohugo.io</generator>
    <lastBuildDate>Thu, 16 Dec 2021 23:00:00 +0900</lastBuildDate><atom:link href="https://takac.dev/categories/trouble-shooting/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Docker: How to solve the trouble of SSH tunnel connection?</title>
      <link>https://takac.dev/docker-how-to-solve-the-trouble-of-ssh-tunnel-connection/</link>
      <pubDate>Thu, 16 Dec 2021 23:00:00 +0900</pubDate>
      
      <guid>https://takac.dev/docker-how-to-solve-the-trouble-of-ssh-tunnel-connection/</guid>
      <description>
        
          &lt;p&gt;I wanted to connect to some external site via my server in AWS because the site has IP address filters as security. However my apartment doesn&#39;t have a static IP address so I came up with an idea connecting to the site via SSH tunnel and if it runs as a container in docker-compose, it’s very easy to execute by the command “docker-compose up -d.” But there was a pitfall when digging an SSH tunnel on docker. Let me share what the trap was and how to solve it.&lt;/p&gt;
&lt;p&gt;The command which I executed on the CLI was like this.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;ssh -4f -NL 20000:hogeadmin.work:443 takashi@myadmin.server -p &lt;span class=&#34;m&#34;&gt;10023&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So, I made a simple container with the following Dockerfile to execute ssh client.&lt;br&gt;
[ssh-tunnel/Dockerfile]&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-dockerfile&#34; data-lang=&#34;dockerfile&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 1&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;FROM&lt;/span&gt;&lt;span class=&#34;s&#34;&gt; alpine:latest&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 2&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 3&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;RUN&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -x &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 4&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; apk update &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 5&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; apk upgrade &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 6&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; apk add --no-cache &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 7&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;            openssh-client &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 8&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;            ca-certificates &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 9&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;            bash &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;            bind-tools&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;EXPOSE&lt;/span&gt;&lt;span class=&#34;s&#34;&gt; 20000-20010&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;ENTRYPOINT&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/docker-entrypoint.sh&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And, I made a simple script as docker-entrypoint.sh.&lt;br&gt;
[ssh-tunnel/docker-entrypoint.sh]&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 1&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/bash
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 2&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;REMOTE_HOST&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;x.x.x.x&amp;#39;&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt; 3&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;REMOTE_USER&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user-name&amp;#39;&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt; 4&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;REMOTE_PORT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;10023&amp;#39;&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt; 5&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt; 6&lt;/span&gt;connect_ssh_tunnel&lt;span class=&#34;o&#34;&gt;(){&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt; 7&lt;/span&gt;    &lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;local_port&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;shift&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt; 8&lt;/span&gt;    &lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;remote_port&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;shift&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt; 9&lt;/span&gt;    &lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fqdn&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;shift&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;11&lt;/span&gt;    ssh -4f -p &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;REMOTE_PORT&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt; -NL &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;local_port&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;:&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;fqdn&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;:&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;remote_port&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;REMOTE_USER&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;@&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;REMOTE_HOST&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;13&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;14&lt;/span&gt;connect_ssh_tunnel &lt;span class=&#34;s1&#34;&gt;&amp;#39;20000&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;443&amp;#39;&lt;/span&gt; hogeadmin.work&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;15&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# To keep running&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;17&lt;/span&gt;tail -f /dev/null
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And then, I made a docker-compose.yml file like this.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 1&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;3.4&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;ssh-tunnel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;build&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./docker/ssh-tunnel&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;restart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;always&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 7&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;container_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ssh-tunnel&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 9&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;m&#34;&gt;443&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20000&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- ./docker/ssh-tunnel/docker-entrypoint.sh&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;/docker-entrypoint.sh&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;ro&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- ~/.ssh&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;/root/.ssh&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;ro&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So, I run the command “docker-compose up -d” to run the container. And then, I tried to connect via curl command with the “--resolve” option.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;$ curl --resolve hogeadmin.work:443:127.0.0.1 https://hogeadmin.work/
&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;curl: &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;35&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to hogeadmin.work 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I was confused because it’s just a simple thing but I got the above error. So, I tried to connect via the telnet command to check the port is alive or not.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;$ telnet localhost &lt;span class=&#34;m&#34;&gt;443&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;Trying ::1...
&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;Connected to localhost.
&lt;span class=&#34;ln&#34;&gt;4&lt;/span&gt;Escape character is &lt;span class=&#34;s1&#34;&gt;&amp;#39;^]&amp;#39;&lt;/span&gt;.
&lt;span class=&#34;ln&#34;&gt;5&lt;/span&gt;Connection closed by foreign host.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The connection was closed quickly. So, I tried to do the same thing in the container.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 1&lt;/span&gt;$ docker &lt;span class=&#34;nb&#34;&gt;exec&lt;/span&gt; -it ssh-tunnel bash
&lt;span class=&#34;ln&#34;&gt; 2&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt; 3&lt;/span&gt;bash-5.1# apk update &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; apk add -f curl
&lt;span class=&#34;ln&#34;&gt; 4&lt;/span&gt;fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/main/x86_64/APKINDEX.tar.gz
&lt;span class=&#34;ln&#34;&gt; 5&lt;/span&gt;fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/community/x86_64/APKINDEX.tar.gz
&lt;span class=&#34;ln&#34;&gt; 6&lt;/span&gt;v3.14.3-58-g7fc21b9dfb &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;https://dl-cdn.alpinelinux.org/alpine/v3.14/main&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt; 7&lt;/span&gt;v3.14.3-57-g005638434d &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;https://dl-cdn.alpinelinux.org/alpine/v3.14/community&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt; 8&lt;/span&gt;OK: &lt;span class=&#34;m&#34;&gt;14942&lt;/span&gt; distinct packages available
&lt;span class=&#34;ln&#34;&gt; 9&lt;/span&gt;OK: &lt;span class=&#34;m&#34;&gt;21&lt;/span&gt; MiB in &lt;span class=&#34;m&#34;&gt;40&lt;/span&gt; packages
&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;11&lt;/span&gt;bash-5.1# curl localhost:20000
&lt;span class=&#34;ln&#34;&gt;12&lt;/span&gt;&amp;lt;html&amp;gt;
&lt;span class=&#34;ln&#34;&gt;13&lt;/span&gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;400 The plain HTTP request was sent to HTTPS port&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;
&lt;span class=&#34;ln&#34;&gt;14&lt;/span&gt;&amp;lt;body&amp;gt;
&lt;span class=&#34;ln&#34;&gt;15&lt;/span&gt;&amp;lt;center&amp;gt;&amp;lt;h1&amp;gt;400 Bad Request&amp;lt;/h1&amp;gt;&amp;lt;/center&amp;gt;
&lt;span class=&#34;ln&#34;&gt;16&lt;/span&gt;&amp;lt;center&amp;gt;The plain HTTP request was sent to HTTPS port&amp;lt;/center&amp;gt;
&lt;span class=&#34;ln&#34;&gt;17&lt;/span&gt;&amp;lt;/body&amp;gt;
&lt;span class=&#34;ln&#34;&gt;18&lt;/span&gt;&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I got the HTTP response as the above. So, the SSH tunnel in itself works correctly but it’s not able to connect via the mapped port which is defined in the docker-compose.yml file. So, I searched about the ssh client command and I realized that the “-L” option has the optional parameter called “bind_address.” So, I add &amp;quot;0.0.0.0&amp;quot; as bind address to the command in the script like this.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;connect_ssh_tunnel&lt;span class=&#34;o&#34;&gt;(){&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;   &lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;local_port&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;shift&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;   &lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;remote_port&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;shift&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;4&lt;/span&gt;   &lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fqdn&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;shift&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;5&lt;/span&gt; 
&lt;span class=&#34;ln&#34;&gt;6&lt;/span&gt;   ssh -4f -p &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;REMOTE_PORT&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt; -NL 0.0.0.0:&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;local_port&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;:&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;fqdn&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;:&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;remote_port&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;REMOTE_USER&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;@&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;REMOTE_HOST&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And then, I restarted the docker-compose and tried again.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 1&lt;/span&gt;$ curl --resolve hogeadmin.work:443:127.0.0.1 https://hogeadmin.work/
&lt;span class=&#34;ln&#34;&gt; 2&lt;/span&gt;&amp;lt;!DOCTYPE HTML&amp;gt;
&lt;span class=&#34;ln&#34;&gt; 3&lt;/span&gt;&amp;lt;html &lt;span class=&#34;nv&#34;&gt;lang&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;ja&amp;#34;&lt;/span&gt;&amp;gt;
&lt;span class=&#34;ln&#34;&gt; 4&lt;/span&gt;    &amp;lt;head&amp;gt;
&lt;span class=&#34;ln&#34;&gt; 5&lt;/span&gt;        &amp;lt;meta &lt;span class=&#34;nv&#34;&gt;charset&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;utf-8&amp;#34;&lt;/span&gt;&amp;gt;
&lt;span class=&#34;ln&#34;&gt; 6&lt;/span&gt;        &amp;lt;/meta&amp;gt;
&lt;span class=&#34;ln&#34;&gt; 7&lt;/span&gt;    &amp;lt;/head&amp;gt;
&lt;span class=&#34;ln&#34;&gt; 8&lt;/span&gt;    &amp;lt;body&amp;gt;
&lt;span class=&#34;ln&#34;&gt; 9&lt;/span&gt;        Forbidden
&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;    &amp;lt;/body&amp;gt;
&lt;span class=&#34;ln&#34;&gt;11&lt;/span&gt;&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Finally, I got the HTTP response so it works as I expected. However this way is simple way so it has some problems as follows.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It’s impossible to get access to some multiple sites at the same time&lt;/li&gt;
&lt;li&gt;It will be a problem when the 443/tcp port is already used in other purpose&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But I have a solution that is a little bit complicated so I’ll share the way in another article in this blog in the near future.&lt;/p&gt;

        
      </description>
    </item>
    
    <item>
      <title>Prometheus: How to solve blackbox exporter icmp (ping) failure</title>
      <link>https://takac.dev/prometheus-how-to-solve-blackbox-exporter-icmp-ping-failure/</link>
      <pubDate>Wed, 28 Jul 2021 23:00:00 +0900</pubDate>
      
      <guid>https://takac.dev/prometheus-how-to-solve-blackbox-exporter-icmp-ping-failure/</guid>
      <description>
        
          &lt;p&gt;I set up my blackbox exporter to monitor some network appliances via ICMP but its RTT was always zero. I&#39;ll share how to investigate this problem and solve it.&lt;/p&gt;
&lt;p&gt;First I added the following module setting to blackbox.yml because I&#39;ve never used ICMP monitoring before.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;modules&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;icmp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;prober&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;icmp&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;timeout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;5s&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then, I added the following setting to the Prometheus configuration file.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;k&#34;&gt;job_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;icmp_check&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;metrics_path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/probe&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;module&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;icmp&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;static_configs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;k&#34;&gt;targets&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;s1&#34;&gt;&amp;#39;target01.hoge&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;s1&#34;&gt;&amp;#39;target02.hoge&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I restarted the Prometheus and the blackbox exporter and Prometheus got started to monitor the above two network appliances. Then, I searched its result by the following query on Prometheus&#39;s web UI.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;probe_icmp_duration_seconds{job=&amp;#34;icmp_check&amp;#34;, phase=&amp;#34;rtt&amp;#34;}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;However, the second one&#39;s value had not been captured correctly even though the first one was correct. Actually the &#39;rtt&#39; was always zero. So, I tried to execute the ping command in the blackbox-exporter&#39;s container but the result was no problem. I was not sure why it happened so I decided to add the debug flag to the blackbox-exporter in my docker-compose.yml file like this.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;blackbox-exporter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;container_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;blackbox-exporter&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;build&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./blackbox_exporter&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;restart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;always&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;9115:9115&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 7&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;--log.level=debug&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 9&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;sysctls&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;net.ipv4.ping_group_range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;0 2147483647&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After restarting the blackbox-exporter, I got the following logs.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;ts=2021-07-01T03:00:00.890Z caller=main.go:180 module=icmp target=target02.hoge level=debug msg=&amp;#34;Beginning probe&amp;#34; probe=icmp timeout_seconds=5
&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;ts=2021-07-01T03:00:00.890Z caller=main.go:180 module=icmp target=target02.hoge level=debug msg=&amp;#34;Resolving target address&amp;#34; ip_protocol=ip6
&lt;/span&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;ts=2021-07-01T03:00:00.892Z caller=main.go:180 module=icmp target=target02.hoge level=debug msg=&amp;#34;Resolved target address&amp;#34; ip=xxxx:xxxx:xxxx:xxxx::1
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;4&lt;/span&gt;ts=2021-07-01T03:00:00.892Z caller=main.go:180 module=icmp target=target02.hoge level=debug msg=&amp;#34;Creating socket&amp;#34;
&lt;span class=&#34;ln&#34;&gt;5&lt;/span&gt;ts=2021-07-01T03:00:00.892Z caller=main.go:180 module=icmp target=target02.hoge level=debug msg=&amp;#34;Creating ICMP packet&amp;#34; seq=57536 id=40265
&lt;span class=&#34;ln&#34;&gt;6&lt;/span&gt;ts=2021-07-01T03:00:00.892Z caller=main.go:180 module=icmp target=target02.hoge level=debug msg=&amp;#34;Writing out packet&amp;#34;
&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;ln&#34;&gt;7&lt;/span&gt;ts=2021-07-01T03:00:00.892Z caller=main.go:180 module=icmp target=target02.hoge level=debug msg=&amp;#34;Error writing to socket&amp;#34; err=&amp;#34;write udp [::]:560-&amp;gt;[xxxx:xxxx:xxxx:xxxx::1]:0: sendto: cannot assign requested address&amp;#34;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;8&lt;/span&gt;ts=2021-07-01T03:00:00.892Z caller=main.go:180 module=icmp target=target02.hoge level=debug msg=&amp;#34;Probe failed&amp;#34; duration_seconds=0.001720556
&lt;span class=&#34;ln&#34;&gt;9&lt;/span&gt;ts=2021-07-01T03:07:19.099Z
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And I realized that the second one&#39;s FQDN was solved as an IPv6 address. It caused the error because Docker uses the IPv4 only as default. So, it couldn&#39;t create a socket to send ICMP packets. That&#39;s why I added the following setting to the blackbox.yml file to use IPv4 preferably.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;modules&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;icmp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;prober&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;icmp&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;timeout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;5s&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;icmp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;preferred_ip_protocol&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;ip4&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then, I restarted the blackbox-exporter again and checked the logs.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;ts=2021-07-01T03:16:27.891Z caller=main.go:180 module=icmp target=target02.hoge level=debug msg=&amp;#34;Beginning probe&amp;#34; probe=icmp timeout_seconds=5
&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;ts=2021-07-01T03:16:27.891Z caller=main.go:180 module=icmp target=target02.hoge level=debug msg=&amp;#34;Resolving target address&amp;#34; ip_protocol=ip4
&lt;/span&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;ts=2021-07-01T03:16:27.892Z caller=main.go:180 module=icmp target=target02.hoge level=debug msg=&amp;#34;Resolved target address&amp;#34; ip=xxx.xxx.xxx.xxx
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;4&lt;/span&gt;ts=2021-07-01T03:16:27.892Z caller=main.go:180 module=icmp target=target02.hoge level=debug msg=&amp;#34;Creating socket&amp;#34;
&lt;span class=&#34;ln&#34;&gt;5&lt;/span&gt;ts=2021-07-01T03:16:27.892Z caller=main.go:180 module=icmp target=target02.hoge level=debug msg=&amp;#34;Creating ICMP packet&amp;#34; seq=39633 id=48931
&lt;span class=&#34;ln&#34;&gt;6&lt;/span&gt;ts=2021-07-01T03:16:27.892Z caller=main.go:180 module=icmp target=target02.hoge level=debug msg=&amp;#34;Writing out packet&amp;#34;
&lt;span class=&#34;ln&#34;&gt;7&lt;/span&gt;ts=2021-07-01T03:16:27.892Z caller=main.go:180 module=icmp target=target02.hoge level=debug msg=&amp;#34;Waiting for reply packets&amp;#34;
&lt;span class=&#34;ln&#34;&gt;8&lt;/span&gt;ts=2021-07-01T03:16:27.997Z caller=main.go:180 module=icmp target=target02.hoge level=debug msg=&amp;#34;Found matching reply packet&amp;#34;
&lt;span class=&#34;ln&#34;&gt;9&lt;/span&gt;ts=2021-07-01T03:16:27.997Z caller=main.go:180 module=icmp target=target02.hoge level=debug msg=&amp;#34;Probe succeeded&amp;#34; duration_seconds=0.106222366
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The exporter used the IPv4 address as I expected. So, I searched its result by the following query on the web UI again.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;probe_icmp_duration_seconds{job=&amp;#34;icmp_check&amp;#34;, phase=&amp;#34;rtt&amp;#34;}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Finally, the value has been captured correctly. Last, don&#39;t forget to turn off the debug log setting for blackbox-exporter to avoid filling up the disk.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;blackbox-exporter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;container_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;blackbox-exporter&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;build&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./blackbox_exporter&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;restart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;always&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;9115:9115&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# command:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;#  - &amp;#34;--log.level=debug&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
        
      </description>
    </item>
    
    <item>
      <title>Fluentd: Warning on parser filter: nested repeat operator &#39;&#43;&#39; and &#39;*&#39; was replaced with &#39;*&#39; in regular expression</title>
      <link>https://takac.dev/fluentd-warning-on-parser-filter-nested-repeat-operator-and-was-replaced-with-in-regular-expression/</link>
      <pubDate>Wed, 19 May 2021 00:35:00 +0900</pubDate>
      
      <guid>https://takac.dev/fluentd-warning-on-parser-filter-nested-repeat-operator-and-was-replaced-with-in-regular-expression/</guid>
      <description>
        
          &lt;p&gt;I needed to add parser settings for CoreDNS working on my Kubernetes cluster for troubleshooting but I got an error &amp;quot;nested repeat operator &#39;+&#39; and &#39;&#39; was replaced with &#39;&#39; in regular expression.&amp;quot; I had no idea why it happened because the additional regular expression was valid. The cause of the error was my mistake so let me share what’s the cause of?&lt;/p&gt;
&lt;p&gt;First, I added log setting to the CoreDNS configuration like this.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 1&lt;/span&gt;$ kubectl get configmaps -n kube-system coredns -o yaml
&lt;span class=&#34;ln&#34;&gt; 2&lt;/span&gt;apiVersion: v1
&lt;span class=&#34;ln&#34;&gt; 3&lt;/span&gt;data:
&lt;span class=&#34;ln&#34;&gt; 4&lt;/span&gt;  Corefile: &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt; 5&lt;/span&gt;    .:53 &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt; 6&lt;/span&gt;        log
&lt;span class=&#34;ln&#34;&gt; 7&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt; 8&lt;/span&gt;        errors
&lt;span class=&#34;ln&#34;&gt; 9&lt;/span&gt;        health &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;           lameduck 5s
&lt;span class=&#34;ln&#34;&gt;11&lt;/span&gt;        &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;12&lt;/span&gt;        ready
&lt;span class=&#34;ln&#34;&gt;13&lt;/span&gt;     :
&lt;span class=&#34;ln&#34;&gt;14&lt;/span&gt;     :
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And then, I restarted the pod and got logs like this.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;[INFO] 172.31.57.199:54169 - 1916 &amp;#34;A IN dynamodb.us-west-2.amazonaws.com. udp 50 false 512&amp;#34; NOERROR qr,rd,ra 98 0.000921506s
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So, I create a regular expression string and test it on &lt;a href=&#34;https://fluentular.herokuapp.com/&#34;&gt;https://fluentular.herokuapp.com/&lt;/a&gt;. Then, added the following filter to the Fluentd configuration.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 1&lt;/span&gt;&amp;lt;filter **&amp;gt;
&lt;span class=&#34;ln&#34;&gt; 2&lt;/span&gt;    @type parser
&lt;span class=&#34;ln&#34;&gt; 3&lt;/span&gt;    key_name log
&lt;span class=&#34;ln&#34;&gt; 4&lt;/span&gt;    reserve_data true
&lt;span class=&#34;ln&#34;&gt; 5&lt;/span&gt;    replace_invalid_sequence true
&lt;span class=&#34;ln&#34;&gt; 6&lt;/span&gt;    &amp;lt;parse&amp;gt;
&lt;span class=&#34;ln&#34;&gt; 7&lt;/span&gt;        @type multi_format
&lt;span class=&#34;ln&#34;&gt; 8&lt;/span&gt;        &amp;lt;pattern&amp;gt;
&lt;span class=&#34;ln&#34;&gt; 9&lt;/span&gt;            format regexp
&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;            expression /^\[(?&amp;lt;severity&amp;gt;\S+)\] (?&amp;lt;remote&amp;gt;\d+\.\d+\.\d+\.\d+):(?&amp;lt;port&amp;gt;\d+) +- (?&amp;lt;id&amp;gt;\d+) +*&amp;#34;(?&amp;lt;type&amp;gt;\S+) +(?&amp;lt;class&amp;gt;\S+) +(?&amp;lt;name&amp;gt;[^ ]+)\. +(?&amp;lt;proto&amp;gt;\S+) +(?&amp;lt;size&amp;gt;\d+) +(?&amp;lt;do&amp;gt;\S+) +(?&amp;lt;bufsize&amp;gt;\d+)&amp;#34; +(?&amp;lt;rcode&amp;gt;\S+) +(?&amp;lt;rflags&amp;gt;[^ ]+) +(?&amp;lt;rsize&amp;gt;\d+) +(?&amp;lt;duration&amp;gt;\d+\.\d+)s$/
&lt;span class=&#34;ln&#34;&gt;11&lt;/span&gt;        &amp;lt;/pattern&amp;gt;
&lt;span class=&#34;ln&#34;&gt;12&lt;/span&gt;     :
&lt;span class=&#34;ln&#34;&gt;13&lt;/span&gt;     :
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After reloading the fluentd pod, then the following error appeared.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;2021-05-17 08:57:06 +0000 [info]: adding filter pattern=&amp;#34;**&amp;#34; type=&amp;#34;parser&amp;#34;
&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;/usr/local/bundle/gems/fluentd-1.11.4/lib/fluent/config/types.rb:92: warning: nested repeat operator &amp;#39;+&amp;#39; and &amp;#39;*&amp;#39; was replaced with &amp;#39;*&amp;#39; in regular expression
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So, I deleted the expression and then I paste each element of the regular expression from the beginning one by one and then I found out the cause of the problem is &amp;quot;(?&lt;id&gt;\d+) +*&amp;quot;(?&lt;type&gt;\S+).&amp;quot;  As you see, there is &amp;quot;+*&amp;quot; as my mistake. So, I modify the part like this.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;^\[(?&amp;lt;severity&amp;gt;\S+)\] (?&amp;lt;remote&amp;gt;\d+\.\d+\.\d+\.\d+):(?&amp;lt;port&amp;gt;\d+) +- (?&amp;lt;id&amp;gt;\d+) +&amp;#34;(?&amp;lt;type&amp;gt;\S+) +(?&amp;lt;class&amp;gt;\S+) +(?&amp;lt;name&amp;gt;[^ ]+)\. +(?&amp;lt;proto&amp;gt;\S+) +(?&amp;lt;size&amp;gt;\d+) +(?&amp;lt;do&amp;gt;\S+) +(?&amp;lt;bufsize&amp;gt;\d+)&amp;#34; +(?&amp;lt;rcode&amp;gt;\S+) +(?&amp;lt;rflags&amp;gt;[^ ]+) +(?&amp;lt;rsize&amp;gt;\d+) +(?&amp;lt;duration&amp;gt;\d+\.\d+)s$
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And then, I restarted the pod and the errors didn’t appear.&lt;/p&gt;

        
      </description>
    </item>
    
    <item>
      <title>PHP: Fatal error when build docker image with composer</title>
      <link>https://takac.dev/php-fatal-error-when-build-docker-image-with-composer/</link>
      <pubDate>Fri, 07 May 2021 00:25:00 +0900</pubDate>
      
      <guid>https://takac.dev/php-fatal-error-when-build-docker-image-with-composer/</guid>
      <description>
        
          &lt;p&gt;I saw this news about the serious vulnerability in composer which is PHP package management software.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.bankinfosecurity.com/php-composer-flaw-that-could-affect-millions-sites-patched-a-16523&#34;&gt;https://www.bankinfosecurity.com/php-composer-flaw-that-could-affect-millions-sites-patched-a-16523&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So, I wanted to update composer in my Dockerfile but I realized that I already specified the version as follows.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;curl -sS https://getcomposer.org/installer &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; php -- --install-dir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/bin --filename&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;composer --version&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;1.10.16
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Because it was a workaround for an error related to hirak/prestissimo which I did before. So, I deleted it and built the Docker image again but I got a different error as follows.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;#14 281.5  122/122 [============================] 100%  - Installing kylekatarnls/update-helper (1.2.0): Extracting archive
&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;#14 281.5 
&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;#14 281.5 Fatal error: Class UpdateHelper\ComposerPlugin contains 2 abstract methods and must therefore be declared abstract or implement the remaining methods (Composer\Plugin\PluginInterface::deactivate, Composer\Plugin\PluginInterface::uninstall) in …
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It looks some problem about kylekatarnls/update-helper library. So, I searched about the library and I found a clue on GitHub.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/kylekatarnls/update-helper/issues/7&#34;&gt;https://github.com/kylekatarnls/update-helper/issues/7&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So, I deleted composer.lock file and built the image again. Then the problem was solved. The above page said I need to delete the ‘vendor’ directory but it’s not necessary for docker build because it will be generated newly.&lt;/p&gt;

        
      </description>
    </item>
    
    <item>
      <title>Python: Got AttributeError when accessing App Store Connect API using appstoreconnect library</title>
      <link>https://takac.dev/python-got-attributeerror-when-accessing-app-store-connect-api-using-appstoreconnect-library/</link>
      <pubDate>Thu, 06 May 2021 23:55:00 +0900</pubDate>
      
      <guid>https://takac.dev/python-got-attributeerror-when-accessing-app-store-connect-api-using-appstoreconnect-library/</guid>
      <description>
        
          &lt;p&gt;I created a small Python program to get data via the App Store Connect API for report automation with the appstoreconnect library. After update recently, I got the following error.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 1&lt;/span&gt;Traceback (most recent call last):
&lt;span class=&#34;ln&#34;&gt; 2&lt;/span&gt;  File &amp;#34;/app/./main.py&amp;#34;, line 88, in &amp;lt;module&amp;gt;
&lt;span class=&#34;ln&#34;&gt; 3&lt;/span&gt;    APP_STORECONNECT_API.execute()
&lt;span class=&#34;ln&#34;&gt; 4&lt;/span&gt;  File &amp;#34;/app/app_store_connect.py&amp;#34;, line 176, in execute
&lt;span class=&#34;ln&#34;&gt; 5&lt;/span&gt;    api = Api(self.API_KEY, self.CERT_FILE, self.ISSUER_ID)
&lt;span class=&#34;ln&#34;&gt; 6&lt;/span&gt;  File &amp;#34;/usr/local/lib/python3.9/site-packages/appstoreconnect/api.py&amp;#34;, line 51, in __init__
&lt;span class=&#34;ln&#34;&gt; 7&lt;/span&gt;    token = self.token  # generate first token
&lt;span class=&#34;ln&#34;&gt; 8&lt;/span&gt;  File &amp;#34;/usr/local/lib/python3.9/site-packages/appstoreconnect/api.py&amp;#34;, line 269, in token
&lt;span class=&#34;ln&#34;&gt; 9&lt;/span&gt;    self._token = self._generate_token()
&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;  File &amp;#34;/usr/local/lib/python3.9/site-packages/appstoreconnect/api.py&amp;#34;, line 64, in _generate_token
&lt;span class=&#34;ln&#34;&gt;11&lt;/span&gt;    return jwt.encode({&amp;#39;iss&amp;#39;: self.issuer_id, &amp;#39;exp&amp;#39;: exp, &amp;#39;aud&amp;#39;: &amp;#39;appstoreconnect-v1&amp;#39;}, key,
&lt;span class=&#34;ln&#34;&gt;12&lt;/span&gt;AttributeError: &amp;#39;str&amp;#39; object has no attribute &amp;#39;decode&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It depends on the above error, the problem happened here.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/Ponytech/appstoreconnectapi/blob/0916ac75790b13cf6c89617209a1a6c2db1f16d1/appstoreconnect/api.py#L79-L80&#34;&gt;https://github.com/Ponytech/appstoreconnectapi/blob/0916ac75790b13cf6c89617209a1a6c2db1f16d1/appstoreconnect/api.py#L79-L80&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And the author already realized about this issue.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/Ponytech/appstoreconnectapi/issues/37&#34;&gt;https://github.com/Ponytech/appstoreconnectapi/issues/37&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;He said the cause of the problem is the type of return value was changed in the JWT library from byte to string since 2.0. So, I thought I should specify a version of JWT which is the latest before 2.0. And then, I checked the version history here.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://pypi.org/project/PyJWT/#history&#34;&gt;https://pypi.org/project/PyJWT/#history&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The latest 1.x version is 1.7.1 so I specified it explicitly when executing the pip command in my Dockerfile like this.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;pip install &lt;span class=&#34;nv&#34;&gt;PyJWT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;1.7.1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The problem was solved. So, this is one of the workarounds for now about this issue.&lt;/p&gt;

        
      </description>
    </item>
    
    <item>
      <title>Ruby: AWS SAM build error with mongoid package</title>
      <link>https://takac.dev/ruby-aws-sam-build-error-with-mongoid-package/</link>
      <pubDate>Fri, 05 Feb 2021 23:59:00 +0900</pubDate>
      
      <guid>https://takac.dev/ruby-aws-sam-build-error-with-mongoid-package/</guid>
      <description>
        
          &lt;p&gt;Same as &lt;a href=&#34;https://takac.dev/ruby-bundle-install-hangs-indefinitely-with-high-cpu-usage&#34; target=&#34;_blank&#34;&gt;my last post&lt;/a&gt;
, I’m not a Ruby developer but I had an opportunity to help move some Ruby applications from EC2 to Lambda on AWS. At the time, I had a problem when I built a Ruby application with AWS SAM framework. Let me share why it happened and how I fixed it.&lt;/p&gt;
&lt;p&gt;I executed the build command &amp;quot;sam build‘ for the Ruby application but it failed with the following error message.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;Build inside container returned response {&amp;#34;jsonrpc&amp;#34;: &amp;#34;2.0&amp;#34;, &amp;#34;id&amp;#34;: 1, &amp;#34;error&amp;#34;: {&amp;#34;code&amp;#34;: 400, &amp;#34;message&amp;#34;: &amp;#34;RubyBundlerBuilder:CopySource - [Errno 2] No such file or directory: &amp;#39;/tmp/samcli/source/vendor/bundle/ruby/2.7.0/gems/mongo-2.14.0/spec/support/ocsp&amp;#39;&amp;#34;}}
&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;Build Failed
&lt;span class=&#34;ln&#34;&gt;4&lt;/span&gt;Sending Telemetry: {&amp;#39;metrics&amp;#39;: [{&amp;#39;commandRun&amp;#39;: {&amp;#39;awsProfileProvided&amp;#39;: False, &amp;#39;debugFlagProvided&amp;#39;: True, &amp;#39;region&amp;#39;: &amp;#39;&amp;#39;, &amp;#39;commandName&amp;#39;: &amp;#39;sam build&amp;#39;, &amp;#39;duration&amp;#39;: 72694, &amp;#39;exitReason&amp;#39;: &amp;#39;BuildInsideContainerError&amp;#39;, &amp;#39;exitCode&amp;#39;: 1, &amp;#39;requestId&amp;#39;: &amp;#39;c9a32492-242a-460b-8633-9c2b8c4b7650&amp;#39;, &amp;#39;installationId&amp;#39;: &amp;#39;a15de333-32e0-4651-b78a-c0843ab41c31&amp;#39;, &amp;#39;sessionId&amp;#39;: &amp;#39;970cf38b-8715-42bb-b726-c664597c56ab&amp;#39;, &amp;#39;executionEnvironment&amp;#39;: &amp;#39;CLI&amp;#39;, &amp;#39;pyversion&amp;#39;: &amp;#39;3.8.7&amp;#39;, &amp;#39;samcliVersion&amp;#39;: &amp;#39;1.15.0&amp;#39;}}]}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It was weird for me because all package files were already installed via &amp;quot;bundle install&amp;quot; command. However, the above error said &amp;quot;No such file or directory&amp;quot; and the file is the following.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;&amp;#39;/tmp/samcli/source/vendor/bundle/ruby/2.7.0/gems/mongo-2.14.0/spec/support/ocsp&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In my Gemfile, I specified &#39;mongoid&#39; and when I executed the &amp;quot;bundle install&amp;quot; command, the ‘mongo’ package was also installed because of the dependency. The automatically installed version was &amp;quot;2.14.0&amp;quot; which is the latest version and I checked the above file path in its GitHub repository.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/mongodb/mongo-ruby-driver/blob/master/spec/support/ocsp&#34;&gt;https://github.com/mongodb/mongo-ruby-driver/blob/master/spec/support/ocsp&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And then, I realized that the file is a symbolic link to the following path.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;../../.mod/drivers-evergreen-tools/.evergreen/ocsp
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And the &lt;a href=&#34;https://github.com/mongodb/mongo-ruby-driver/tree/master/.mod&#34; target=&#34;_blank&#34;&gt;.mod&lt;/a&gt;
 directory in the above path and &amp;quot;drivers-evergreen-tools&amp;quot; is a symbolic link to the other repository called &lt;a href=&#34;https://github.com/mongodb-labs/drivers-evergreen-tools/tree/7489b21c4ef74a318c5c855c150cb05a727153b4&#34; target=&#34;_blank&#34;&gt;drivers-evergreen-tools&lt;/a&gt;
. That’s why it&#39;s become a broken link in the installed source code directory.&lt;/p&gt;
&lt;p&gt;So, I checked the commit log in the &lt;a href=&#34;https://github.com/mongodb/mongo-ruby-driver/blob/master/spec/support/ocsp&#34; target=&#34;_blank&#34;&gt;mongo package repository&lt;/a&gt;
 and the file was added on 9 Sep 2020. And then, I saw the list of the mongo package’s version on the &lt;a href=&#34;https://rubygems.org/gems/mongo&#34; target=&#34;_blank&#34;&gt;gems&lt;/a&gt;
 site. And it said as follows.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;2.14.0 - December 01, 2020 (886KB)
&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;2.14.0.rc1 - October 09, 2020 (883KB)
&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;2.13.2 - December 01, 2020 (862KB)
&lt;span class=&#34;ln&#34;&gt;4&lt;/span&gt;2.13.1 - October 09, 2020 (855KB)
&lt;span class=&#34;ln&#34;&gt;5&lt;/span&gt;2.13.0 - July 30, 2020 (855KB)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So first, I deleted the installed directory and modified the version to 2.13.2 in the Gemfile as follows. And then, install the package again via &amp;quot;bundle install&amp;quot; command.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;gem &amp;#39;mongo&amp;#39;, &amp;#39;~&amp;gt; 2.13.2&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Luckily, the broken link had disappeared and succeeded to build by &amp;quot;sam build&amp;quot; command.&lt;/p&gt;
&lt;p&gt;So, I’m not sure what’s OCSP exactly and why they put the link in the repository. However, I hope it will be helpful for somebody who has the same problems.&lt;/p&gt;

        
      </description>
    </item>
    
    <item>
      <title>Ruby: bundle install hangs indefinitely with high CPU usage</title>
      <link>https://takac.dev/ruby-bundle-install-hangs-indefinitely-with-high-cpu-usage/</link>
      <pubDate>Sun, 31 Jan 2021 00:08:05 +0900</pubDate>
      
      <guid>https://takac.dev/ruby-bundle-install-hangs-indefinitely-with-high-cpu-usage/</guid>
      <description>
        
          &lt;p&gt;Actually, I’m not a Ruby developer but I had an opportunity to help move some Ruby applications from EC2 to Lambda on AWS. At that time, I had an issue when I execute &amp;quot;bundle install&amp;quot; inside the container to build with the SAM framework. The problem was the command didn’t finish indefinitely. I searched about it and found some people who had the same issue but there was no way to work around it. I think changing or deleting versions will solve the problem. Let me share how to do that.&lt;/p&gt;
&lt;p&gt;First, comment out all lines in the Gemfile, and then enable a package one by one. If you find the package which is the cause of the hanging, try the following way.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If it’s already specified some version, delete it.&lt;/li&gt;
&lt;li&gt;Specify its latest version explicitly.&lt;/li&gt;
&lt;li&gt;Specify the previous version of the latest one or the one after next&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In my case, &amp;quot;activesupport&amp;quot; was the cause of the issue. Before I modified the Gemfile, it did have specified versions explicitly and installed &amp;quot;6.0.3.4&amp;quot; automatically by bundle. However, I checked rubygems.org and the latest version was &amp;quot;6.1.1&amp;quot; so I wrote it down like this and the problem was solved.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;gem &amp;#39;activesupport&amp;#39;, &amp;#39;~&amp;gt; 6.1.1&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I’m not sure this way will solve all the same issues but I hope it will be helpful for somebody who has the same problems.&lt;/p&gt;

        
      </description>
    </item>
    
    <item>
      <title>Docker: What should I do when getting &#34;503 service unavailable&#34; error after executing docker pull command?</title>
      <link>https://takac.dev/docker-what-should-i-do-when-getting-503-service-unavailable-error-after-executing-docker-pull-command/</link>
      <pubDate>Sat, 26 Dec 2020 22:04:00 +0900</pubDate>
      
      <guid>https://takac.dev/docker-what-should-i-do-when-getting-503-service-unavailable-error-after-executing-docker-pull-command/</guid>
      <description>
        
          &lt;p&gt;Getting &amp;quot;503 service unavailable&amp;quot; error after executing &amp;quot;docker pull&amp;quot; command is a very rare situation but there was in the past. So, it’s worth knowing for using docker. Most of the time, this is Docker Hub’ server side problem not client one. Once the error happens, we should visit their web site called &lt;a href=&#34;https://status.docker.com/&#34; target=&#34;_blank&#34;&gt;Docker system status real-time view&lt;/a&gt;
 before struggling. When the error happened, may be &amp;quot;Docker Hub Registry&amp;quot; is in some trouble status.&lt;/p&gt;

        
      </description>
    </item>
    
    <item>
      <title>Docker: How to solve Apache 403 Forbidden error?</title>
      <link>https://takac.dev/docker-how-to-solve-apache-403-forbidden-error/</link>
      <pubDate>Fri, 25 Dec 2020 01:28:00 +0900</pubDate>
      
      <guid>https://takac.dev/docker-how-to-solve-apache-403-forbidden-error/</guid>
      <description>
        
          &lt;p&gt;It&#39;s a popular problem getting &amp;quot;403 Forbidden&amp;quot; errors from Apache. Even though it&#39;s working on the docker, it&#39;s the same but a little bit harder to investigate why it’s happened. However, most of the time, the cause of this problem is simple. Let’s take a look at some samples.&lt;/p&gt;
&lt;p&gt;First, let me show you the correct way. Here is the vhost configuration file as vhost.conf.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;&amp;lt;VirtualHost *:80&amp;gt;
&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;    DocumentRoot /var/www/html
&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;&amp;lt;/VirtualHost
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And make a directory and put a text file for verifying.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;mkdir app/web
&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Hoge&amp;#34;&lt;/span&gt; &amp;gt; app/web/index.html
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And make a docker-compose.yml file like this.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-dockerfile&#34; data-lang=&#34;dockerfile&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 1&lt;/span&gt;version: &lt;span class=&#34;s1&#34;&gt;&amp;#39;3&amp;#39;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 2&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;services:&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 3&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  app:&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 4&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;    container_name: my-app&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 5&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;    image: php:7.4-apache&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 6&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;    ports:&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 7&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;      - 8080:80&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 8&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;    volumes:&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 9&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;      - ./app/web:/var/www/html&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;      - ./vhost.conf:/etc/apache2/sites-enabled/000-default.conf&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then, it’s ready for running. Execute it like this.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;docker-compose up
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And open a new terminal and execute curl command for verifying.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;$ curl localhost:8080
&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;Hoge
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is what I expected. It’s totally no problem. But sometimes &amp;quot;403 Forbidden&amp;quot; errors appear. How it happens? Most of the time, the cause of the error is modifying document root directory. Here is a sample.&lt;/p&gt;
&lt;p&gt;Modify the document root setting in vhost.conf&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;&amp;lt;VirtualHost *:80&amp;gt;
&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;    DocumentRoot /srv/app
&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;&amp;lt;/VirtualHost&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And modify docker-compose.yml too.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-dockerfile&#34; data-lang=&#34;dockerfile&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 1&lt;/span&gt;version: &lt;span class=&#34;s1&#34;&gt;&amp;#39;3&amp;#39;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 2&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;services:&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 3&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  app:&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 4&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;    container_name: my-app&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 5&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;    image: php:7.4-apache&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 6&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;    ports:&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 7&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;      - 8080:80&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 8&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;    volumes:&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt; 9&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;      - ./app/web:/srv/app&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;      - ./vhost.conf:/etc/apache2/sites-enabled/000-default.conf&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;However, if I execute curl command the same as the last time, the error will be returned.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 1&lt;/span&gt;$ curl localhost:8080
&lt;span class=&#34;ln&#34;&gt; 2&lt;/span&gt;&amp;lt;!DOCTYPE HTML PUBLIC &lt;span class=&#34;s2&#34;&gt;&amp;#34;-//IETF//DTD HTML 2.0//EN&amp;#34;&lt;/span&gt;&amp;gt;
&lt;span class=&#34;ln&#34;&gt; 3&lt;/span&gt;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;
&lt;span class=&#34;ln&#34;&gt; 4&lt;/span&gt;&amp;lt;title&amp;gt;403 Forbidden&amp;lt;/title&amp;gt;
&lt;span class=&#34;ln&#34;&gt; 5&lt;/span&gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;
&lt;span class=&#34;ln&#34;&gt; 6&lt;/span&gt;&amp;lt;h1&amp;gt;Forbidden&amp;lt;/h1&amp;gt;
&lt;span class=&#34;ln&#34;&gt; 7&lt;/span&gt;&amp;lt;p&amp;gt;You don&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;t have permission to access this resource.&amp;lt;/p&amp;gt;
&lt;span class=&#34;ln&#34;&gt; 8&lt;/span&gt;&amp;lt;hr&amp;gt;
&lt;span class=&#34;ln&#34;&gt; 9&lt;/span&gt;&amp;lt;address&amp;gt;Apache/2.4.38 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Debian&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; Server at localhost Port 8080&amp;lt;/address&amp;gt;
&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The hint is Apache&#39;s default settings.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 1&lt;/span&gt;$ docker run -it --rm --entrypoint sh php:7.4-apache -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;cat /etc/apache2/apache2.conf&amp;#34;&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt; 2&lt;/span&gt;  :
&lt;span class=&#34;ln&#34;&gt; 3&lt;/span&gt;  :
&lt;span class=&#34;ln&#34;&gt; 4&lt;/span&gt;&amp;lt;Directory /&amp;gt;
&lt;span class=&#34;ln&#34;&gt; 5&lt;/span&gt;        Options FollowSymLinks
&lt;span class=&#34;ln&#34;&gt; 6&lt;/span&gt;        AllowOverride None
&lt;span class=&#34;ln&#34;&gt; 7&lt;/span&gt;        Require all denied
&lt;span class=&#34;ln&#34;&gt; 8&lt;/span&gt;&amp;lt;/Directory&amp;gt;
&lt;span class=&#34;ln&#34;&gt; 9&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;&amp;lt;Directory /usr/share&amp;gt;
&lt;span class=&#34;ln&#34;&gt;11&lt;/span&gt;        AllowOverride None
&lt;span class=&#34;ln&#34;&gt;12&lt;/span&gt;        Require all granted
&lt;span class=&#34;ln&#34;&gt;13&lt;/span&gt;&amp;lt;/Directory&amp;gt;
&lt;span class=&#34;ln&#34;&gt;14&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;15&lt;/span&gt;&amp;lt;Directory /var/www/&amp;gt;
&lt;span class=&#34;ln&#34;&gt;16&lt;/span&gt;        Options Indexes FollowSymLinks
&lt;span class=&#34;ln&#34;&gt;17&lt;/span&gt;        AllowOverride None
&lt;span class=&#34;ln&#34;&gt;18&lt;/span&gt;        Require all granted
&lt;span class=&#34;ln&#34;&gt;19&lt;/span&gt;&amp;lt;/Directory&amp;gt;
&lt;span class=&#34;ln&#34;&gt;20&lt;/span&gt;  :
&lt;span class=&#34;ln&#34;&gt;21&lt;/span&gt;  :
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As you see above, the first setting is set &amp;quot;all denied&amp;quot; for the root directory. And then, &amp;quot;/usr/share&amp;quot; and &amp;quot;/var/www/&amp;quot; is granted. So, even though I modify the directory path in the vhost.conf and docker-compose.yml file, the modified directory is not granted. So, the response will be the error.&lt;/p&gt;
&lt;p&gt;So, how to fix it when I need to modify the document root directory? It’s necessary to add a grant setting like this.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;&amp;lt;VirtualHost *:80&amp;gt;
&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;    DocumentRoot /srv/app/web
&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;4&lt;/span&gt;    &amp;lt;Directory &amp;#34;/srv/app/web&amp;#34;&amp;gt;
&lt;span class=&#34;ln&#34;&gt;5&lt;/span&gt;        AllowOverride all
&lt;span class=&#34;ln&#34;&gt;6&lt;/span&gt;        Require all granted
&lt;span class=&#34;ln&#34;&gt;7&lt;/span&gt;    &amp;lt;/Directory&amp;gt;
&lt;span class=&#34;ln&#34;&gt;8&lt;/span&gt;&amp;lt;/VirtualHost&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The error will disappear.&lt;/p&gt;
&lt;p&gt;And also, mistakes of the mount point is also a popular cause of some problems. For example, confusing &amp;quot;sites-available&amp;quot; and &amp;quot;sites-enabled&amp;quot; directories. In the traditional way, add the configuration file to &amp;quot;sites-available&amp;quot; first, and then execute &amp;quot;a2ensite&amp;quot; command to make it enabled and then restart the Apache process with graceful option. However, when executing the Apache on docker, no need to do that. Just mount it to 000-default.conf file under the &amp;quot;sites-enabled.&amp;quot; If it’s mounted under the &amp;quot;sites-available&amp;quot; as follows, it will not be loaded by Apache.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;    volumes:
&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;      - ./app/web:/srv/app
&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;      - ./vhost.conf:/etc/apache2/sites-available/000-default.conf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
        
      </description>
    </item>
    
    <item>
      <title>Docker Hub: Error 429 too many requests</title>
      <link>https://takac.dev/docker-hub-error-429-too-many-requests/</link>
      <pubDate>Thu, 19 Nov 2020 14:17:00 +0900</pubDate>
      
      <guid>https://takac.dev/docker-hub-error-429-too-many-requests/</guid>
      <description>
        
          &lt;p&gt;One day, I realized that one of my CodePipeline was failed to build the docker image. I investigated what caused the error. And then, I found out the following error message when executing docker build command.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;ERROR: failed to copy: httpReaderSeeker: failed open: unexpected status code https://registry-1.docker.io/v2/library/php/manifests/sha256:7b1cd0d9e1922e96ad3bc9fc44880cf7247f5a22a4badfd25480bf759edf2804: 429 Too Many Requests - Server message: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I remembered the news which I read before that Docker Hub got started to set some limits and I checked the link which is included in the above error.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.docker.com/increase-rate-limit&#34; target=&#34;_blank&#34;&gt;Understanding Docker Hub Rate Limiting&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;However, I was confused because I’m working for a very small start-up company and the CodePipeline runs a few times a day so I couldn’t understand why I reached the limit. Then, I came out that it may be &amp;quot;docker login&amp;quot; is necessary because the CodePipeline environment is shared servers so anonymous access was added up together. So, I got a new log-in account for building image and added the following command before docker build command in the buildspec in the CodePipeline and then I solved the problem.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;docker login -u hoge-hoge -p fuga
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
        
      </description>
    </item>
    
    <item>
      <title>Kubernetes: How many pods are available per node on AWS EKS?</title>
      <link>https://takac.dev/how-many-pods-are-available-on-compute-nodes-of-aws-eks/</link>
      <pubDate>Sat, 10 Oct 2020 16:51:00 +0900</pubDate>
      
      <guid>https://takac.dev/how-many-pods-are-available-on-compute-nodes-of-aws-eks/</guid>
      <description>
        
          &lt;p&gt;When getting started to use AWS EKS for building Kubernetes clusters, we should consider the limitations of the number of IP addresses it depends on the instance size. Actually, I didn’t know about it because I just overlooked it on the official document. I know it was my mistake but it should be a blind spot for some people so I’ll share my experience.&lt;/p&gt;
&lt;p&gt;After a few months since I got started to use our cluster, I realize that there’s some error logs of kubelet like this.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;RunPodSandbox from runtime service failed: rpc error: code = Unknown desc = failed to set up sandbox container &amp;#34;xxxxxx&amp;#34; network for pod &amp;#34;hoge-1602061920-snvck&amp;#34;: NetworkPlugin cni failed to set up pod &amp;#34;hoge-1602061920-snvck_apps&amp;#34; network: add cmd: failed to assign an IP address to container
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I investigated this problem and then I found out there’s some limitation of the pod’s number by EC2 instance’s restrictions. EC2 instances has the limitation of the number of ENI (Elastic Network Interface) and how many IP addresses it’s able to have. The limitation is defined depending on the instance size. For example, m5.Large instance is able to have 3 ENIs and 10 IP addresses for each ENI so totally 30 addresses. However the primary address of each ENI cannot be used for Pods so 27 addresses will be available for pods. Another example, m5.4xlarge instance is able to have 8 ENIs and 30 IP addresses for each ENI so 232 addresses will be available for pods.&lt;/p&gt;
&lt;p&gt;I’m not sure it’s enough compared to the resources like CPUs and memories for most people. However it should be considered before using EKS especially the cluster size is not large yet. In my case, after reaching the limitation, I’m operating as follows.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use NodeAffinity option to avoid running multiple pods on the same node and don’t increase the replica number over the number of nodes&lt;/li&gt;
&lt;li&gt;When running batches as CronJobs, adjust the schedule to avoid overlapping&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;References&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html&#34; target=&#34;_blank&#34;&gt;AWS &amp;amp;gt; Documentation &amp;amp;gt; Amazon EC2 &amp;amp;gt; User Guide for Linux Instances &amp;amp;gt; Elastic network interfaces&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

        
      </description>
    </item>
    
    <item>
      <title>HAProxy running on Kubernetes and output a lot of BADREQ logs</title>
      <link>https://takac.dev/haproxy-running-on-k8s-and-output-a-lot-of-badreq-logs/</link>
      <pubDate>Fri, 09 Oct 2020 23:35:00 +0900</pubDate>
      
      <guid>https://takac.dev/haproxy-running-on-k8s-and-output-a-lot-of-badreq-logs/</guid>
      <description>
        
          &lt;p&gt;When I was setting up HAProxy running on our Kubernetes cluster, I defined the log format as JSON and I got a lot of BADREQ logs with status code 400 as follows.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt; 2&lt;/span&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;conn&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt; 3&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;act&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt; 4&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;fe&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt; 5&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;be&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt; 6&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;srv&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt; 7&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt; 8&lt;/span&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;queue&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt; 9&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;backend&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;srv&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;11&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;12&lt;/span&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;time&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;13&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;tq&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;-1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;14&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;tw&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;-1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;15&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;tc&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;-1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;16&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;tr&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;-1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;17&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;tt&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;18&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;19&lt;/span&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;termination_state&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;CR--&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;20&lt;/span&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;retries&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;21&lt;/span&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;network&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;22&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;client_ip&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;172.31.79.179&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;23&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;client_port&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;63740&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;24&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;frontend_ip&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;172.31.76.184&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;25&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;frontend_port&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;80&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;26&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;27&lt;/span&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;ssl&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;28&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;version&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;-&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;29&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;ciphers&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;-&amp;#34;&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;30&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;31&lt;/span&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;request&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;32&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;method&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;BADREQ&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;33&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;uri&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;-&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;34&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;protocol&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;BADREQ&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;35&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;header&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;36&lt;/span&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;host&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;-&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;37&lt;/span&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;xforwardfor&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;-&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;38&lt;/span&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;referer&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;-&amp;#34;&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;39&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;40&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;41&lt;/span&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;42&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;backend&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;https-in&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;43&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;frontend&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;https-in&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;44&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;server&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;NOSRV&amp;gt;&amp;#34;&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;45&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;46&lt;/span&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;response&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;47&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;status_code&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;400&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;48&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;header&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;49&lt;/span&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;xrequestid&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;-&amp;#34;&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;50&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;51&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;52&lt;/span&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;bytes&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;53&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;uploaded&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;54&lt;/span&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;read&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;245&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;55&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;ln&#34;&gt;56&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As a result of researching these error logs, I realize that the cause of these errors is the liveness probe of Kubernetes like this.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;livenessProbe&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;tcpSocket&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;port&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;initialDelaySeconds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;ln&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;periodSeconds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I’m not sure but I think health-check by TCP not HTTP will raise the same logs.&lt;/p&gt;
&lt;p&gt;Finally, I solved this problem by adding &amp;quot;dontlognull&amp;quot; option like this.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;defaults
&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;    mode http
&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;    option dontlognull
&lt;span class=&#34;ln&#34;&gt;4&lt;/span&gt;       :
&lt;span class=&#34;ln&#34;&gt;5&lt;/span&gt;       :
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
        
      </description>
    </item>
    
  </channel>
</rss>
