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 向けに環境を整えるメモ。
ディスクサイズを拡張する方法は以下のドキュメントを参照。
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install . ~/.bashrc
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 で大事なポイントは語られている。実家の一軒家が古くなっており、両親も体が弱ってきており、この問題は自分事として考えなければならず、本を読んだ。まさに今後の自分とその家族の問題がそのまま書かれていると感じる。家族全員で読んでこの問題を真面目に考えたい。
3 つのポイントに要約
- リフォームの 3 つの目的は、1) 病気や怪我を予防し健康寿命を延ばす、2) 介護される人のためではなく、介護をする人の負担を減らす、3) 自分でできることを増やす
- 怪我や病気になどによって体が動かなくなってからでは間に合わないので、元気なうちに、リフォームをしておくことが大事
- そもそも、家というのは定期的なメンテナンスでお金がかかるもの 60 歳 〜 90 歳の 30 年を暮らすためのリフォームを 60 歳の時に行うのがよい
気になった部分の引用
高齢になると一晩に数回、トイレに行くという人も少なくありません。尿意を認識するタイミングも遅れがちです。このため2階の寝室から1階のトイレに急ごうとし、足を踏み外しての転倒や転落事故などが起こりやすくなっています。
両親がまさに 2 階で寝ていて 1 階のトイレに通っているので、危険な状態だと感じた。
日本では、年間2万人近い高齢者がヒートショックで亡くなっています。これは、熱中症やインフルエンザで亡くなる高齢者より遙かに多い数です。
学生時代に札幌に住んでいた頃、たまに実家に帰ってくると、冗談ではなく札幌より寒く感じた。家の断熱が致命的に悪いのだと思う。札幌は二重窓だった。断熱を何とかしたい。
高齢化に備えたリフォームは、長年暮らしてきた生活を一度リセットし、不要なものを(元気なうちに!)自力で処分できる絶好のチャンスです。モノを整理・処分するためにこそリフォームすべき、とさえ言えるかもしれません。このように、そもそも高齢化対策リフォームとは「家を安全にし、体が不自由になるリスクを減らすための予防策」であり、「自分のためではなく、家族の負担を少なくするための準備(マナーであり、思いやり)なのだ」ということをよくよく理解しておきたいものです。
リフォームを断捨離のきっかけとするのはなるほどと思った。
つまり体が弱っても「ひとりでできることの多い家=自立して暮らしやすい家」とは、「水回りが使いやすい家」なのです。
リフォームの優先順位の高い場所として水回りがあげられていた。実家をリフォームする場合、トイレとお風呂が最初だろう。
洗面室一体型のトイレがお勧め
妻のおばあちゃんのお家が、トイレと洗面室が一体になっていたが、なるほど、と納得した。リフォームするならこの形式にしたい。
つまり、車椅子で水栓を利用するには「シンク、洗面台の下がオープンで、車椅子をその下に引き込める」ことが必要なのです。
シンクの下に収納庫があるのはダメ。座って利用できる必要がある。
定年を迎え、入ってくるお金が年金だけとなり、毎月の収支が赤字になると、相当の貯金のある人でも「できるだけ節約しよう」と考えがちです。
父がリフォームを嫌がっているが、この気持ちなのだろう。理解できる。
読書メモ: 不老不死の研究
堀江氏の本は似たような予防医療関係の本「むだ死にしない技術」「健康の結論」 を読んだことがある。最新のものをまた読んだ。
全体的な感想
これまでに読んだ本と同様、基本的な主張として、予防医療を重視しようというのと、QOL を向上させるために使える医療やテクノロジーは活用しようという主張がある。加えて、最新の医療でどんなことが研究されているのか、何がどこまでできるのかというような取材結果が載せられている。コールドスリープとか、未来の医療については正直ピンとこないところが多かった。
3 つに要約
- 胃がんの原因はピロリ菌なので検査して除去しよう、便潜血検査で大腸がんも検査しよう
- 糖尿病はやばい、腎臓の組織ネフロンは回復しないので大事にしよう、結局腹八分目と運動が大切
- 医療は日々進歩していて、今後さらに進んだ医療が登場すると期待される
気になった部分の引用
平たく言うと、SGLT2阻害薬は血液中に偏在する糖を、尿の中にどんどん排出してくれる。糖分の再吸収を抑え、血糖値を下げられるのだ。SGLT2阻害薬と阻害薬とリパーゼ(脂肪分解酵素)阻害薬を同時に服用すれば、会食続きの毎日でも脂質&糖質フリーダイエットが実現できるのではないかーー。私の心は躍った。
この本を読んで一番の収穫はそんな薬があるのだと知ったことだ。少し前にゼニカルという脂質を排出する薬が薬局で売られるかもしれないというニュースを見たときに、堀江氏が笑い飛ばしていたけれど、SGLT2阻害薬というもっといい薬があるよと意味だったのだろうと思う。
ゼニカル笑。17年前くらいに飲んでたな。周回遅れ。 https://t.co/FMC9phQrMP
— 堀江貴文(Takafumi Horie) (@takapon_jp) 2022年11月30日
まずは「腹八分目」が基本だとと伊藤教授は指摘する。暴飲暴食をせず、ほどほどのところでカロリー制限に努める。会食や飲み会が多い人は、私のように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
ひとつひとつ探すと、25134
が pod1
と同じ 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#