openssl で SNI を指定して接続する

openssl コマンドで SNI を偽装して接続する方法のメモ。

tcpdump を取得。

[root@ip-172-31-41-121 ~]# tcpdump -nn -i eth0 -s 0 -w /tmp/tcpdump1.pcap
dropped privs to tcpdump
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C179 packets captured
183 packets received by filter
0 packets dropped by kernel
[root@ip-172-31-41-121 ~]#

この間に接続を行う。

[root@ip-172-31-41-121 ~]# openssl s_client -connect www.sotoiwa.com:443 -msg -quiet 2> /dev/null | egrep "<<<|>>>"
>>> ??? [length 0005]
>>> TLS 1.3, Handshake [length 0134], ClientHello
<<< ??? [length 0005]
<<< TLS 1.3, Handshake [length 007a], ServerHello
<<< ??? [length 0005]
<<< ??? [length 0005]
<<< TLS 1.3 [length 0001]
<<< TLS 1.3, Handshake [length 000a], EncryptedExtensions
<<< ??? [length 0005]
<<< TLS 1.3 [length 0001]
<<< TLS 1.3, Handshake [length 1363], Certificate
<<< ??? [length 0005]
<<< TLS 1.3 [length 0001]
<<< TLS 1.3, Handshake [length 0108], CertificateVerify
<<< ??? [length 0005]
<<< TLS 1.3 [length 0001]
<<< TLS 1.3, Handshake [length 0024], Finished
>>> ??? [length 0005]
>>> TLS 1.3, ChangeCipherSpec [length 0001]
>>> ??? [length 0005]
>>> TLS 1.3 [length 0001]
>>> TLS 1.3, Handshake [length 0024], Finished
<<< ??? [length 0005]
<<< TLS 1.3 [length 0001]
<<< TLS 1.3, Handshake [length 007c], NewSessionTicket
<<< ??? [length 0005]
<<< TLS 1.3 [length 0001]
<<< TLS 1.3, Alert [length 0002], warning close_notify
>>> ??? [length 0005]
>>> TLS 1.3 [length 0001]
>>> TLS 1.3, Alert [length 0002], warning close_notify
[root@ip-172-31-41-121 ~]#

ファイルをダウロードして確認する。セッションマネージャー経由の SCP は以下の記事が参考になる。

パケットを確認する。Client Hello パケットの Server Name が接続先と同じ www.sotoiwa.com になっている。

もう一度 tcpdump を取得。

[root@ip-172-31-41-121 ~]# tcpdump -nn -i eth0 -s 0 -w /tmp/tcpdump2.pcap
dropped privs to tcpdump
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C84 packets captured
88 packets received by filter
0 packets dropped by kernel
[root@ip-172-31-41-121 ~]#

今度は SNI を変えて接続。すぐ切断される。

[root@ip-172-31-41-121 ~]# openssl s_client -connect www.sotoiwa.com:443 -servername hogehoge.example.com -msg -quiet 2> /dev/null | egrep "<<<|>>>"
>>> ??? [length 0005]
>>> TLS 1.3, Handshake [length 0139], ClientHello
<<< ??? [length 0005]
<<< TLS 1.3, Alert [length 0002], fatal handshake_failure
[root@ip-172-31-41-121 ~]#

パケットを確認する。Server Name が指定した hogehoge.example.com になっている。

Cloud9 を EKS 向けにセットアップ

Cloud9 環境を起動した後 EKS 向けに環境を整えるメモ。

ディスクサイズを拡張する方法は以下のドキュメントを参照。

AWS CLI を最新化する。

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
. ~/.bashrc

AWS CLI にリージョンを設定する。

AWS_REGION="ap-northeast-1"
aws configure set default.region ${AWS_REGION}

Cloud9 の一時的なクレデンシャルを無効化する (IAM ロールがアタッチされていることが前提) 。

aws cloud9 update-environment  --environment-id $C9_PID --managed-credentials-action DISABLE
rm -vf ${HOME}/.aws/credentials

eksctl を導入する。

curl -L "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin

kubectl を導入する。

sudo curl -L -o /usr/local/bin/kubectl https://s3.us-west-2.amazonaws.com/amazon-eks/1.24.10/2023-01-30/bin/linux/amd64/kubectl
sudo chmod +x /usr/local/bin/kubectl

helm を導入する。

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

helmfile を導入する。

HELMFILE_VERSION=$(curl -s "https://api.github.com/repos/helmfile/helmfile/releases/latest" |
  grep '"tag_name":' |
  sed -E 's/.*"v([^"]+)".*/\1/'
)
curl -L "https://github.com/helmfile/helmfile/releases/download/v${HELMFILE_VERSION}/helmfile_${HELMFILE_VERSION}_linux_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/helmfile /usr/local/bin

helmfile を初期化する。

helmfile init --force

jq などいくつかのツールを導入する。

sudo yum -y install jq bash-completion tree gettext moreutils

各種ツールの補完を有効にする。

sudo curl -L -o /etc/bash_completion.d/docker https://raw.githubusercontent.com/docker/cli/master/contrib/completion/bash/docker
kubectl completion bash > kubectl_completion
sudo mv kubectl_completion /etc/bash_completion.d/kubectl
eksctl completion bash > eksctl_completion
sudo mv eksctl_completion /etc/bash_completion.d/eksctl
helm completion bash > helm_completion
sudo mv helm_completion /etc/bash_completion.d/helm
helmfile completion bash > helmfile_completion
sudo mv helmfile_completion /etc/bash_completion.d/helmfile

エイリアスを設定する。

cat <<"EOT" >> ${HOME}/.bashrc

alias k="kubectl"
complete -o default -F __start_kubectl k
alias ek="eksctl"
complete -o default -F __start_eksctl ek
EOT

kube-ps1 を導入する。

git clone https://github.com/jonmosco/kube-ps1.git ~/.kube-ps1
cat <<"EOT" >> ~/.bashrc

source ~/.kube-ps1/kube-ps1.sh
function get_cluster_short() {
  echo "$1" | cut -d . -f1
}
KUBE_PS1_CLUSTER_FUNCTION=get_cluster_short
KUBE_PS1_SUFFIX=') '
PS1='$(kube_ps1)'$PS1
EOT

kubectx/kubens を導入する。

git clone https://github.com/ahmetb/kubectx.git ~/.kubectx
sudo ln -sf ~/.kubectx/completion/kubens.bash /etc/bash_completion.d/kubens
sudo ln -sf ~/.kubectx/completion/kubectx.bash /etc/bash_completion.d/kubectx
cat <<"EOT" >> ~/.bashrc

export PATH=~/.kubectx:$PATH
EOT

stern を導入する。

STERN_VERSION=$(curl -s "https://api.github.com/repos/stern/stern/releases/latest" |
  grep '"tag_name":' |
  sed -E 's/.*"v([^"]+)".*/\1/'
)
curl -L "https://github.com/stern/stern/releases/download/v${STERN_VERSION}/stern_${STERN_VERSION}_linux_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/stern /usr/local/bin

設定が完了したら、ターミナルを開き直すこと。

読書メモ: 高齢化対策リフォーム入門

ちきりん氏の Voicy でのこの配信をきっかけに、この本を読んだ。

voicy.jp

全体的な感想

Voicy で大事なポイントは語られている。実家の一軒家が古くなっており、両親も体が弱ってきており、この問題は自分事として考えなければならず、本を読んだ。まさに今後の自分とその家族の問題がそのまま書かれていると感じる。家族全員で読んでこの問題を真面目に考えたい。

3 つのポイントに要約

  • リフォームの 3 つの目的は、1) 病気や怪我を予防し健康寿命を延ばす、2) 介護される人のためではなく、介護をする人の負担を減らす、3) 自分でできることを増やす
  • 怪我や病気になどによって体が動かなくなってからでは間に合わないので、元気なうちに、リフォームをしておくことが大事
  • そもそも、家というのは定期的なメンテナンスでお金がかかるもの 60 歳 〜 90 歳の 30 年を暮らすためのリフォームを 60 歳の時に行うのがよい

気になった部分の引用

高齢になると一晩に数回、トイレに行くという人も少なくありません。尿意を認識するタイミングも遅れがちです。このため2階の寝室から1階のトイレに急ごうとし、足を踏み外しての転倒や転落事故などが起こりやすくなっています。

両親がまさに 2 階で寝ていて 1 階のトイレに通っているので、危険な状態だと感じた。

日本では、年間2万人近い高齢者がヒートショックで亡くなっています。これは、熱中症やインフルエンザで亡くなる高齢者より遙かに多い数です。

学生時代に札幌に住んでいた頃、たまに実家に帰ってくると、冗談ではなく札幌より寒く感じた。家の断熱が致命的に悪いのだと思う。札幌は二重窓だった。断熱を何とかしたい。

高齢化に備えたリフォームは、長年暮らしてきた生活を一度リセットし、不要なものを(元気なうちに!)自力で処分できる絶好のチャンスです。モノを整理・処分するためにこそリフォームすべき、とさえ言えるかもしれません。このように、そもそも高齢化対策リフォームとは「家を安全にし、体が不自由になるリスクを減らすための予防策」であり、「自分のためではなく、家族の負担を少なくするための準備(マナーであり、思いやり)なのだ」ということをよくよく理解しておきたいものです。

リフォームを断捨離のきっかけとするのはなるほどと思った。

つまり体が弱っても「ひとりでできることの多い家=自立して暮らしやすい家」とは、「水回りが使いやすい家」なのです。

リフォームの優先順位の高い場所として水回りがあげられていた。実家をリフォームする場合、トイレとお風呂が最初だろう。

洗面室一体型のトイレがお勧め

妻のおばあちゃんのお家が、トイレと洗面室が一体になっていたが、なるほど、と納得した。リフォームするならこの形式にしたい。

つまり、車椅子で水栓を利用するには「シンク、洗面台の下がオープンで、車椅子をその下に引き込める」ことが必要なのです。

シンクの下に収納庫があるのはダメ。座って利用できる必要がある。

定年を迎え、入ってくるお金が年金だけとなり、毎月の収支が赤字になると、相当の貯金のある人でも「できるだけ節約しよう」と考えがちです。

父がリフォームを嫌がっているが、この気持ちなのだろう。理解できる。

読書メモ: 不老不死の研究

堀江氏の本は似たような予防医療関係の本「むだ死にしない技術」「健康の結論」 を読んだことがある。最新のものをまた読んだ。

全体的な感想

これまでに読んだ本と同様、基本的な主張として、予防医療を重視しようというのと、QOL を向上させるために使える医療やテクノロジーは活用しようという主張がある。加えて、最新の医療でどんなことが研究されているのか、何がどこまでできるのかというような取材結果が載せられている。コールドスリープとか、未来の医療については正直ピンとこないところが多かった。

3 つに要約

  • 胃がんの原因はピロリ菌なので検査して除去しよう、便潜血検査で大腸がんも検査しよう
  • 糖尿病はやばい、腎臓の組織ネフロンは回復しないので大事にしよう、結局腹八分目と運動が大切
  • 医療は日々進歩していて、今後さらに進んだ医療が登場すると期待される

気になった部分の引用

平たく言うと、SGLT2阻害薬は血液中に偏在する糖を、尿の中にどんどん排出してくれる。糖分の再吸収を抑え、血糖値を下げられるのだ。SGLT2阻害薬と阻害薬とリパーゼ(脂肪分解酵素)阻害薬を同時に服用すれば、会食続きの毎日でも脂質&糖質フリーダイエットが実現できるのではないかーー。私の心は躍った。

この本を読んで一番の収穫はそんな薬があるのだと知ったことだ。少し前にゼニカルという脂質を排出する薬が薬局で売られるかもしれないというニュースを見たときに、堀江氏が笑い飛ばしていたけれど、SGLT2阻害薬というもっといい薬があるよと意味だったのだろうと思う。

まずは「腹八分目」が基本だとと伊藤教授は指摘する。暴飲暴食をせず、ほどほどのところでカロリー制限に努める。会食や飲み会が多い人は、私のようにSGLT2阻害薬を服用するのも一つの方法だ。

海外通販で買えるようなので飲んでみたい。

早期発見のため、40歳を過ぎた人は毎年1回便潜血検査を受けてください。この検査によって、肉眼ではわからない大腸のわずかな出血を見つけられます」(鈴木准教授)

ピロリ菌の検査もしたし、毎年人間ドックで便潜血検査も受けるようにしている。

出版の企画と並行して、短編映画「糖尿病の不都合な真実」も制作・発表している。予防医療普及協会のウェブサイト(https://yobolife.jp/diabetes_truth/)にアクセスすると、約20分のショートムービーが無料で見られる。ぜひ観賞してみてほしい。

このショートムービーはまだ見ていないが、この本を読んで一番怖くなったのは糖尿病である。去年の健康診断で腎臓のスコアが悪かったので非常に怖い。

「子どもが肥満児の家庭は、親も肥満であることが多いです。スナック菓子が好きな子どもは、親もジャンクフードやお菓子が大好きなことが多いものです。家庭環境を変えないことには、糖尿病予備群を減らすことはなかなかできません。

これは耳が痛い。

成人が1日に飲む水の量の目安は、1.5リットルです。腎臓病の種類や程度にもよりますが、軽症から中等症の慢性腎臓病の方は、それよりも多く水を飲んでください。」(永井准教授)

たくさん水を飲もうと思った。

「既存のバイオマーカーで最も一般的なのは、eGFR(推算糸球体濾過量)です。個人差はありますが、いわゆる正常値はeGFR100程度と考えられており、eGFRが50と出れば、ネフロンが半分壊れていることが予想されます。eGFRが15であれば、末期の腎不全と判定され、人工透析開始までそんなに余裕がありません。

自分のスコアを確認したら、かなりまずいことがわかった。

コンビニでサンドイッチや弁当、惣菜の食品表示ラベルを眺めてみると、添加物の中に「リン酸塩」という物質が入っていることがある。これが人工的に作られたリンだ。

リンの過剰摂取も腎臓にダメージを与えるらしい。身近なものを見てみたら、サラダチキンに「リン酸塩」が入っていた。リンの摂取についても気をつけたい。

Linux namespace と Pod とコンテナ

Linux namespace と Pod とコンテナの関係を確認するメモ。

EKS 1.24 のクラスターで確認する。

$ k get node   
NAME                                             STATUS   ROLES    AGE   VERSION
ip-10-0-10-67.ap-northeast-1.compute.internal    Ready    <none>   85m   v1.24.7-eks-fb459a0
ip-10-0-10-76.ap-northeast-1.compute.internal    Ready    <none>   85m   v1.24.7-eks-fb459a0
ip-10-0-11-179.ap-northeast-1.compute.internal   Ready    <none>   85m   v1.24.7-eks-fb459a0

テスト用に普通の Pod を起動する。

cat << EOF > pod1.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: pod1
  name: pod1
spec:
  nodeName: ip-10-0-10-76.ap-northeast-1.compute.internal
  containers:
  - image: nginx
    name: c1
  - image: nginx
    name: c2
    command:
    - sleep
    - infinity
EOF
k apply -f pod1.yaml
cat << EOF > pod2.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: pod2
  name: pod2
spec:
  nodeName: ip-10-0-10-76.ap-northeast-1.compute.internal
  containers:
  - image: nginx
    name: c3
EOF
k apply -f pod2.yaml

Pod を確認する。

$ k get po -o wide
NAME   READY   STATUS    RESTARTS   AGE     IP            NODE                                            NOMINATED NODE   READINESS GATES
pod1   2/2     Running   0          10s     10.0.10.156   ip-10-0-10-76.ap-northeast-1.compute.internal   <none>           <none>
pod2   1/1     Running   0          3m11s   10.0.10.32    ip-10-0-10-76.ap-northeast-1.compute.internal   <none>           <none>

ワーカーノードにログインし、crictl をインストールする。

VERSION="v1.26.0"
wget https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-$VERSION-linux-amd64.tar.gz
sudo tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin
rm -f crictl-$VERSION-linux-amd64.tar.gz

一般ユーザーではパーミッションが足りなかったので、root で作業する。

sudo -i
PATH=/usr/local/bin:$PATH

コンテナを確認する。

[root@ip-10-0-10-76 ~]# crictl ps
WARN[0000] runtime connect using default endpoints: [unix:///var/run/dockershim.sock unix:///run/containerd/containerd.sock unix:///run/crio/crio.sock unix:///var/run/cri-dockerd.sock]. As the default settings are now deprecated, you should set the endpoint instead.
WARN[0000] image connect using default endpoints: [unix:///var/run/dockershim.sock unix:///run/containerd/containerd.sock unix:///run/crio/crio.sock unix:///var/run/cri-dockerd.sock]. As the default settings are now deprecated, you should set the endpoint instead.
CONTAINER           IMAGE               CREATED             STATE               NAME                     ATTEMPT             POD ID              POD
e403fe5ffa665       a99a39d070bfd       27 seconds ago      Running             c2                       0                   bb248149db8aa       pod1
302bc156a8851       a99a39d070bfd       29 seconds ago      Running             c1                       0                   bb248149db8aa       pod1
e26060a138fa0       a99a39d070bfd       3 minutes ago       Running             c3                       0                   44aa61e83205b       pod2
39a2e1ffb3802       e89557324d1dc       About an hour ago   Running             aws-cloudwatch-metrics   0                   ba00864e6c645       aws-cloudwatch-metrics-rz8gg
a5df991ddd9b5       5bad0186aac16       2 hours ago         Running             aws-node                 0                   4c89a915897ac       aws-node-h8zpz
34a11679a69b7       45d382f80f905       2 hours ago         Running             liveness-probe           0                   7277b4c16e132       ebs-csi-node-fbj5c
7c6bf9d37cb96       23b72c0353f68       2 hours ago         Running             node-driver-registrar    0                   7277b4c16e132       ebs-csi-node-fbj5c
45312cd447464       b0bf1b95ca27d       2 hours ago         Running             ebs-plugin               0                   7277b4c16e132       ebs-csi-node-fbj5c
101e615d876fb       c78e7b825058a       2 hours ago         Running             coredns                  0                   efd0307fb7b4a       coredns-5fc8d4cdcf-cpmbk
6669bfb0ed765       c78e7b825058a       2 hours ago         Running             coredns                  0                   35b82e7e655a9       coredns-5fc8d4cdcf-h82vt
41168828c2868       04beb3b811d34       2 hours ago         Running             kube-proxy               0                   4aed797955139       kube-proxy-xk924

pod1 では 2 つ (c1, c2) のコンテナが動いているが、それらの PID を確認する。

[root@ip-10-0-10-76 ~]# crictl inspect 302bc156a8851 | grep pid
WARN[0000] runtime connect using default endpoints: [unix:///var/run/dockershim.sock unix:///run/containerd/containerd.sock unix:///run/crio/crio.sock unix:///var/run/cri-dockerd.sock]. As the default settings are now deprecated, you should set the endpoint instead.
    "pid": 25202,
            "pid": 1
            "type": "pid"
[root@ip-10-0-10-76 ~]# crictl inspect e403fe5ffa665 | grep pid
WARN[0000] runtime connect using default endpoints: [unix:///var/run/dockershim.sock unix:///run/containerd/containerd.sock unix:///run/crio/crio.sock unix:///var/run/cri-dockerd.sock]. As the default settings are now deprecated, you should set the endpoint instead.
    "pid": 25296,
            "pid": 1
            "type": "pid"
[root@ip-10-0-10-76 ~]#

pod2 の 1 つのコンテナの PID も確認する。

[root@ip-10-0-10-76 ~]# crictl inspect e26060a138fa0 | grep pid
WARN[0000] runtime connect using default endpoints: [unix:///var/run/dockershim.sock unix:///run/containerd/containerd.sock unix:///run/crio/crio.sock unix:///var/run/cri-dockerd.sock]. As the default settings are now deprecated, you should set the endpoint instead.
    "pid": 22813,
            "pid": 1
            "type": "pid"

それぞれのプロセスの Namespace を見てみる。

[root@ip-10-0-10-76 ~]# ls -l /proc/25202/ns
total 0
lrwxrwxrwx 1 root root 0 Jan 11 08:57 cgroup -> cgroup:[4026531835]
lrwxrwxrwx 1 root root 0 Jan 11 08:57 ipc -> ipc:[4026532688]
lrwxrwxrwx 1 root root 0 Jan 11 08:57 mnt -> mnt:[4026532690]
lrwxrwxrwx 1 root root 0 Jan 11 08:57 net -> net:[4026532610]
lrwxrwxrwx 1 root root 0 Jan 11 08:57 pid -> pid:[4026532691]
lrwxrwxrwx 1 root root 0 Jan 11 08:57 pid_for_children -> pid:[4026532691]
lrwxrwxrwx 1 root root 0 Jan 11 08:57 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 Jan 11 08:57 uts -> uts:[4026532687]
[root@ip-10-0-10-76 ~]# ls -l /proc/25296/ns
total 0
lrwxrwxrwx 1 root root 0 Jan 11 08:57 cgroup -> cgroup:[4026531835]
lrwxrwxrwx 1 root root 0 Jan 11 08:57 ipc -> ipc:[4026532688]
lrwxrwxrwx 1 root root 0 Jan 11 08:57 mnt -> mnt:[4026532775]
lrwxrwxrwx 1 root root 0 Jan 11 08:57 net -> net:[4026532610]
lrwxrwxrwx 1 root root 0 Jan 11 08:57 pid -> pid:[4026532776]
lrwxrwxrwx 1 root root 0 Jan 11 08:57 pid_for_children -> pid:[4026532776]
lrwxrwxrwx 1 root root 0 Jan 11 08:57 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 Jan 11 08:57 uts -> uts:[4026532687]
[root@ip-10-0-10-76 ~]# ls -l /proc/22813/ns
total 0
lrwxrwxrwx 1 root root 0 Jan 11 08:57 cgroup -> cgroup:[4026531835]
lrwxrwxrwx 1 root root 0 Jan 11 08:57 ipc -> ipc:[4026532771]
lrwxrwxrwx 1 root root 0 Jan 11 08:57 mnt -> mnt:[4026532773]
lrwxrwxrwx 1 root root 0 Jan 11 08:57 net -> net:[4026532693]
lrwxrwxrwx 1 root root 0 Jan 11 08:57 pid -> pid:[4026532774]
lrwxrwxrwx 1 root root 0 Jan 11 08:57 pid_for_children -> pid:[4026532774]
lrwxrwxrwx 1 root root 0 Jan 11 08:57 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 Jan 11 08:57 uts -> uts:[4026532770]

さらにホストの自分自身 (bash) の名前空間を見てみる。

[root@ip-10-0-10-76 ~]# ls -l /proc/$$/ns
total 0
lrwxrwxrwx 1 root root 0 Jan 11 08:40 cgroup -> cgroup:[4026531835]
lrwxrwxrwx 1 root root 0 Jan 11 08:40 ipc -> ipc:[4026531839]
lrwxrwxrwx 1 root root 0 Jan 11 08:40 mnt -> mnt:[4026531840]
lrwxrwxrwx 1 root root 0 Jan 11 08:40 net -> net:[4026531992]
lrwxrwxrwx 1 root root 0 Jan 11 08:40 pid -> pid:[4026531836]
lrwxrwxrwx 1 root root 0 Jan 11 08:40 pid_for_children -> pid:[4026531836]
lrwxrwxrwx 1 root root 0 Jan 11 08:40 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 Jan 11 08:40 uts -> uts:[4026531838]

表にしてみる。

namespace c1 (pod1) c2 (pod1) c3 (pod2) bash
cgroup 4026531835 4026531835 4026531835 4026531835
ipc 4026532688 4026532688 4026532771 4026531839
mnt 4026532690 4026532775 4026532773 4026531840
net 4026532610 4026532610 4026532693 4026531992
pid 4026532691 4026532776 4026532774 4026531836
pid_for_children 4026532691 4026532776 4026532774 4026531836
user 4026531837 4026531837 4026531837 4026531837
uts 4026532687 4026532687 4026532770 4026531838

まとめる。

namespace 同 Pod の別コンテナ 別 Pod の別コンテナ まとめ
cgroup 同じ 同じ 隔離されていない (ホストと同じ)
ipc 同じ Pod 毎
mnt コンテナ毎
net 同じ Pod 毎
pid コンテナ毎
pid_for_children コンテナ毎
user 同じ 同じ 隔離されていない (ホストと同じ)
uts 同じ Pod 毎

crictl では表示されていないが、pause コンテナがあったはず。

[root@ip-10-0-10-76 ~]# ps -ef | grep pause
root      3464     1  1 Jan11 ?        00:14:53 /usr/bin/kubelet --cloud-provider aws --image-credential-provider-config /etc/eks/ecr-credential-provider/ecr-credential-provider-config --image-credential-provider-bin-dir /etc/eks/ecr-credential-provider --config /etc/kubernetes/kubelet/kubelet-config.json --kubeconfig /var/lib/kubelet/kubeconfig --container-runtime remote --container-runtime-endpoint unix:///run/containerd/containerd.sock --node-ip=10.0.10.76 --pod-infra-container-image=602401143452.dkr.ecr.ap-northeast-1.amazonaws.com/eks/pause:3.5 --v=2 --node-labels=eks.amazonaws.com/nodegroup-image=ami-0a29a25cb84e79542,eks.amazonaws.com/capacityType=ON_DEMAND,eks.amazonaws.com/nodegroup=managed-ondemand-20230111062322101300000001 --max-pods=58
65535     3709  3663  0 Jan11 ?        00:00:00 /pause
65535     4640  4607  0 Jan11 ?        00:00:00 /pause
65535     4687  4599  0 Jan11 ?        00:00:00 /pause
root      4777  4707  0 00:55 pts/0    00:00:00 grep --color=auto pause
root     19591 19567  0 Jan11 ?        00:00:00 /pause
65535    20238 20208  0 Jan11 ?        00:00:00 /pause
65535    22745 22720  0 Jan11 ?        00:00:00 /pause
65535    25134 25109  0 Jan11 ?        00:00:00 /pause
65535    30715 30687  0 Jan11 ?        00:00:00 /pause

ひとつひとつ探すと、25134pod1 と同じ ipc/net/uts namespace を保持していることが確認できた。

[root@ip-10-0-10-76 ~]# ls -l /proc/25134/ns
total 0
lrwxrwxrwx 1 65535 65535 0 Jan 12 01:03 cgroup -> cgroup:[4026531835]
lrwxrwxrwx 1 65535 65535 0 Jan 11 08:53 ipc -> ipc:[4026532688]
lrwxrwxrwx 1 65535 65535 0 Jan 12 01:03 mnt -> mnt:[4026532686]
lrwxrwxrwx 1 65535 65535 0 Jan 11 08:53 net -> net:[4026532610]
lrwxrwxrwx 1 65535 65535 0 Jan 12 01:03 pid -> pid:[4026532689]
lrwxrwxrwx 1 65535 65535 0 Jan 12 01:03 pid_for_children -> pid:[4026532689]
lrwxrwxrwx 1 65535 65535 0 Jan 12 01:03 user -> user:[4026531837]
lrwxrwxrwx 1 65535 65535 0 Jan 11 08:53 uts -> uts:[4026532687]

プロセスの親子関係はこうなっている。

[root@ip-10-0-10-76 ~]# pstree -p 25109
containerd-shim(25109)─┬─nginx(25202)─┬─nginx(25273)
                       │              ├─nginx(25274)
                       │              ├─nginx(25275)
                       │              └─nginx(25277)
                       ├─pause(25134)
                       ├─sleep(25296)
                       ├─{containerd-shim}(25110)
                       ├─{containerd-shim}(25111)
                       ├─{containerd-shim}(25112)
                       ├─{containerd-shim}(25113)
                       ├─{containerd-shim}(25114)
                       ├─{containerd-shim}(25115)
                       ├─{containerd-shim}(25116)
                       ├─{containerd-shim}(25117)
                       ├─{containerd-shim}(25118)
                       ├─{containerd-shim}(25176)
                       ├─{containerd-shim}(28809)
                       └─{containerd-shim}(8915)

参考リンク

/proc ディレクトリ

/proc ディレクトリのメモ。

適当な Pod を実行する。

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: apache
  name: apache
spec:
  containers:
  - image: httpd
    name: apache
    resources: {}
    env:
    - name: SECRET
      value: "012345678902"
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}
k apply -f pod.yaml
root@cks-master:~# k get pod
NAME     READY   STATUS    RESTARTS   AGE
apache   1/1     Running   0          12m

ワーカーノードでこの Pod を確認する。

root@cks-worker:~# crictl ps
CONTAINER           IMAGE               CREATED             STATE               NAME                ATTEMPT             POD ID              POD
5ed77af7498a4       73c10eb9266e7       13 minutes ago      Running             apache              0                   4da15aa43350f       apache
7ff96b31dd2d8       e6ea68648f0cd       5 hours ago         Running             kube-flannel        1                   b612e5af2647b       canal-ncg7l
ff37aef743c83       75392e3500e36       5 hours ago         Running             calico-node         1                   b612e5af2647b       canal-ncg7l
a68026fe5b938       430bf372a28b7       5 hours ago         Running             kube-proxy          1                   e03da17696175       kube-proxy-sq2p6

PID を確認する。

root@cks-worker:~# crictl inspect 5ed77af7498a4 | grep pid
    "pid": 65429,
            "pid": 1
            "type": "pid"

ps コマンドでも確認する。

root@cks-worker:~# ps -ef | grep httpd
root       65429   65369  0 00:54 ?        00:00:00 httpd -DFOREGROUND
www-data   65442   65429  0 00:54 ?        00:00:00 httpd -DFOREGROUND
www-data   65443   65429  0 00:54 ?        00:00:00 httpd -DFOREGROUND
www-data   65444   65429  0 00:54 ?        00:00:00 httpd -DFOREGROUND
root       69073   68717  0 01:08 pts/0    00:00:00 grep --color=auto httpd

このプロセスの /proc/65429 ディレクトリを見てみる。

root@cks-worker:~# cd /proc/65429
root@cks-worker:/proc/65429# ls -l
total 0
-r--r--r--  1 root root 0 Jan  5 00:57 arch_status
dr-xr-xr-x  2 root root 0 Jan  5 00:57 attr
-rw-r--r--  1 root root 0 Jan  5 00:57 autogroup
-r--------  1 root root 0 Jan  5 00:57 auxv
-r--r--r--  1 root root 0 Jan  5 00:54 cgroup
--w-------  1 root root 0 Jan  5 00:57 clear_refs
-r--r--r--  1 root root 0 Jan  5 00:55 cmdline
-rw-r--r--  1 root root 0 Jan  5 00:57 comm
-rw-r--r--  1 root root 0 Jan  5 00:57 coredump_filter
-r--r--r--  1 root root 0 Jan  5 00:57 cpu_resctrl_groups
-r--r--r--  1 root root 0 Jan  5 00:57 cpuset
lrwxrwxrwx  1 root root 0 Jan  5 00:57 cwd -> /usr/local/apache2
-r--------  1 root root 0 Jan  5 00:57 environ
lrwxrwxrwx  1 root root 0 Jan  5 00:54 exe -> /usr/local/apache2/bin/httpd
dr-x------  2 root root 0 Jan  5 00:54 fd
dr-xr-xr-x  2 root root 0 Jan  5 00:57 fdinfo
-rw-r--r--  1 root root 0 Jan  5 00:57 gid_map
-r--------  1 root root 0 Jan  5 00:57 io
-r--r--r--  1 root root 0 Jan  5 00:54 limits
-rw-r--r--  1 root root 0 Jan  5 00:57 loginuid
dr-x------  2 root root 0 Jan  5 00:57 map_files
-r--r--r--  1 root root 0 Jan  5 00:57 maps
-rw-------  1 root root 0 Jan  5 00:57 mem
-r--r--r--  1 root root 0 Jan  5 00:54 mountinfo
-r--r--r--  1 root root 0 Jan  5 00:57 mounts
-r--------  1 root root 0 Jan  5 00:57 mountstats
dr-xr-xr-x 64 root root 0 Jan  5 00:54 net
dr-x--x--x  2 root root 0 Jan  5 00:55 ns
-r--r--r--  1 root root 0 Jan  5 00:57 numa_maps
-rw-r--r--  1 root root 0 Jan  5 00:57 oom_adj
-r--r--r--  1 root root 0 Jan  5 00:57 oom_score
-rw-r--r--  1 root root 0 Jan  5 00:57 oom_score_adj
-r--------  1 root root 0 Jan  5 00:57 pagemap
-r--------  1 root root 0 Jan  5 00:57 patch_state
-r--------  1 root root 0 Jan  5 00:57 personality
-rw-r--r--  1 root root 0 Jan  5 00:57 projid_map
lrwxrwxrwx  1 root root 0 Jan  5 00:57 root -> /
-rw-r--r--  1 root root 0 Jan  5 00:57 sched
-r--r--r--  1 root root 0 Jan  5 00:57 schedstat
-r--r--r--  1 root root 0 Jan  5 00:57 sessionid
-rw-r--r--  1 root root 0 Jan  5 00:57 setgroups
-r--r--r--  1 root root 0 Jan  5 00:57 smaps
-r--r--r--  1 root root 0 Jan  5 00:57 smaps_rollup
-r--------  1 root root 0 Jan  5 00:57 stack
-r--r--r--  1 root root 0 Jan  5 00:54 stat
-r--r--r--  1 root root 0 Jan  5 00:57 statm
-r--r--r--  1 root root 0 Jan  5 00:55 status
-r--------  1 root root 0 Jan  5 00:57 syscall
dr-xr-xr-x  3 root root 0 Jan  5 00:56 task
-rw-r--r--  1 root root 0 Jan  5 00:57 timens_offsets
-r--r--r--  1 root root 0 Jan  5 00:57 timers
-rw-rw-rw-  1 root root 0 Jan  5 00:57 timerslack_ns
-rw-r--r--  1 root root 0 Jan  5 00:54 uid_map
-r--r--r--  1 root root 0 Jan  5 00:57 wchan
root@cks-worker:/proc/65429#

exe がこのプロセスの実行ファイル。

root@cks-worker:/proc/65429# ls -l exe
lrwxrwxrwx 1 root root 0 Jan  5 00:54 exe -> /usr/local/apache2/bin/httpd
root@cks-worker:/proc/65429#

root ディレクトリでコンテナから見えているファイルシステムが確認できる。

root@cks-worker:/proc/65429/root# ls -l
total 68
drwxr-xr-x   1 root root 4096 Dec 21 11:27 bin
drwxr-xr-x   2 root root 4096 Dec  9 19:15 boot
drwxr-xr-x   5 root root  360 Jan  5 00:54 dev
drwxr-xr-x   1 root root 4096 Jan  5 00:54 etc
drwxr-xr-x   2 root root 4096 Dec  9 19:15 home
drwxr-xr-x   1 root root 4096 Dec 21 11:27 lib
drwxr-xr-x   2 root root 4096 Dec 19 00:00 lib64
drwxr-xr-x   2 root root 4096 Dec 19 00:00 media
drwxr-xr-x   2 root root 4096 Dec 19 00:00 mnt
drwxr-xr-x   2 root root 4096 Dec 19 00:00 opt
dr-xr-xr-x 188 root root    0 Jan  5 00:54 proc
drwx------   1 root root 4096 Jan  5 00:55 root
drwxr-xr-x   1 root root 4096 Jan  5 00:54 run
drwxr-xr-x   2 root root 4096 Dec 19 00:00 sbin
drwxr-xr-x   2 root root 4096 Dec 19 00:00 srv
dr-xr-xr-x  13 root root    0 Jan  5 00:54 sys
drwxrwxrwt   1 root root 4096 Dec 21 11:26 tmp
drwxr-xr-x   1 root root 4096 Dec 19 00:00 usr
drwxr-xr-x   1 root root 4096 Dec 19 00:00 var
root@cks-worker:/proc/65429/root# cd ../
root@cks-worker:/proc/65429#

environ ファイルで環境変数が確認できる。

root@cks-worker:/proc/65429# cat environ
HTTPD_VERSION=2.4.54KUBERNETES_SERVICE_PORT=443KUBERNETES_PORT=tcp://10.96.0.1:443HOSTNAME=apacheHOME=/rootHTTPD_PATCHES=KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1PATH=/usr/local/apache2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binKUBERNETES_PORT_443_TCP_PORT=443HTTPD_SHA256=eb397feeefccaf254f8d45de3768d9d68e8e73851c49afd5b7176d1ecf80c340KUBERNETES_PORT_443_TCP_PROTO=tcpSECRET=012345678902HTTPD_PREFIX=/usr/local/apache2KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443KUBERNETES_SERVICE_PORT_HTTPS=443KUBERNETES_SERVICE_HOST=10.96.0.1PWD=/usr/local/apache2root@cks-worker:/proc/65429#

fd がファイルディスクリプタで開いているファイルを確認できる。

root@cks-worker:/proc/65429# cd fd
root@cks-worker:/proc/65429/fd# ls -l
total 0
lrwx------ 1 root root 64 Jan  5 00:54 0 -> /dev/null
l-wx------ 1 root root 64 Jan  5 00:54 1 -> 'pipe:[311806]'
l-wx------ 1 root root 64 Jan  5 00:54 2 -> 'pipe:[311807]'
lrwx------ 1 root root 64 Jan  5 00:55 3 -> 'socket:[311114]'
lrwx------ 1 root root 64 Jan  5 00:55 4 -> 'socket:[311115]'
lr-x------ 1 root root 64 Jan  5 00:55 5 -> 'pipe:[311126]'
l-wx------ 1 root root 64 Jan  5 00:54 6 -> 'pipe:[311126]'
l-wx------ 1 root root 64 Jan  5 00:55 7 -> 'pipe:[311806]'
root@cks-worker:/proc/65429/fd# cd ../
root@cks-worker:/proc/65429#