電影流水帳(2022/10/01~2022/11/30)

A defaced subway advertisement for the movie “The Hitman’s Bodyguard” (2017) spotted in the Cortlandt Street subway station in Lower Manhattan.
The Hitman’s Bodyguard

The Hitman’s Bodyguard

娛樂性很高的片,有動作、有槍戰、有嘴賤的鬥嘴,也有搞笑,蠻歡樂的。

Michael 是個保鏢,但因為某次陰錯陽差,要保護的對象被幹掉了,他從鼎鼎大名的 3A 等級,落到很差的等級,只能接一些零星的案子過活。Vladislav 是某獨裁國家的總統,利用他的權力跟金錢,引起國際動亂,被國際法庭起訴。而 Darius 是個殺手,受雇殺了很多人,被捕入獄,CIA 需要他出庭作證 Vladislav 的罪行。

Vladislav 怎麼可能會放過能出庭指證他的人?於是他找了殺手,幹掉每個 CIA 找來出庭的証人,這次當然也不放過 Darius 。CIA 派了大批人馬保護 Darius,但 Vladislav 找來的殺手太厲害,CIA 的人都被幹掉,裏面認識 Michael 的 Amelia ,是 Michael 的前女友,他知道 Michael 很可靠,就把 Darius 托付給 Michael,要 Michael 保護 Darius ,送他安全出庭。Michael 跟 Amelia 談好條件,就接下這任務了。

一個是保鏢,一個是殺手,行事上本就南轅北轍、風格迥異,一路上打打鬧鬧,幹掉 Vladislav 派來的所有人。到了後來安全送 Darius 到目的地的時候,Darius 才告訴 Michael,當時害他落入差評的事件,就是他剛好看到要暗殺的對象,順手幹掉的。Michael 超不爽,就跟 Darius 鬧翻了。後來,Michael 靜下心來聽進 Darius 勸告,回頭到法庭上去幫忙 Darius 避免被 Vladislav 的人暗殺,兩人最終握手言和,平安落幕。

讓子彈飛

買官的故事,在第四台看了好幾次的片段,這次總算用 Netflix 看完。

馬邦德買了個官,在上任途中,被張麻子伏擊,為了保命,馬邦德謊稱馬邦德死了,自己是師爺,說張麻子可以頂替這位子上任。張麻子始終也沒說自己是張麻子,馬邦德也不知道這位是張麻子,于是乎,張麻子就這樣上任了。

到了縣城,張麻子發現張麻子只是個恍子,真正的權力是在黃四郎這個富翁身上。黃四郎、張麻子、馬邦德就在這樣的情況下,相互探底、勾心鬥角,想要探出彼此的底細。經過幾次衝突跟協調以後,黃四郎跟張麻子達成協議,黃四郎出錢讓縣長張麻子去打土匪張麻子,一行人浩浩蕩蕩出發,在半路上,縣長張麻子被假的土匪張麻子給伏擊了,打了一場以後,縣長張麻子逮住假土匪,問供以後,得知黃四郎真的就是背後的那隻手。縣長張麻子超不爽了,就回去縣城發錢、發彈藥,想要發起反抗。透過替身黃四郎,才真正的鼓動起縣城的人一同反抗,攻入黃四郎豪宅。最後黃四郎家財散盡,落入窘況,張麻子等人也散伙,不再當土匪。

Molly’s Game

半敘事、類似紀錄片的手法來拍 Molly 的故事,我還滿喜歡這樣的電影,第四台帶到時,會被帶進劇情裡。

Molly 從小時候起,父親就栽培她做一個滑雪選手,Molly 對父親的嚴苛不滿,去大學念法律以後就不再回家。她邊唸書邊打工,透過打工的事務所,她了解了地下賭盤的生態,從而發現這很好賺。後來打工的事務所解僱她,她就自己出來作地下賭盤。生意愈做愈大,看了很多名人、富翁的揮霍跟起落,在經歷過許多之後,她被起訴、扣押,她出了書,找律師 Charlie 幫忙。Charlie 本來是不想幫忙的,但因為女兒還有書裡講的事情實在是很吸引他,就決定幫了忙。Charlie 跟 Molly 幾次訪談與取得 Molly 第一手資料以後,了解了整個事情的經過,明白 Molly 是有在用心保護每個賭客的。最終 Molly 跟 Charlie 在法庭上取得了優勢,不被起訴。Molly 後來跟父親和解,不做賭盤了,回頭滑雪。

銀魂

看這部真人電影之前,建議先看過漫畫或動畫比較好,後面有些部份若沒看漫畫或動畫,真的比較沒辦法投入。人物的還原度我覺得蠻高的,蠻多地方很搞笑,但現在我卻想不起來故事在講什麼。

故事記得是在講妖刀紅櫻的事情,打造紅櫻的村田鐵矢的妹妹村田鐵子委託萬事屋阿銀去調查妖刀的事情,正巧街上也頻傳有人被殺掉的事件,阿銀就展開調查。後來發現妖刀跟之前昔日同窗還有鬼兵隊有關係,為了阻止他們,就打了起來,後面就不太記得了。

trivy-operator

Trivy 是 AquaSecurity 開發的工具,它可以掃描漏洞與有問題的設定檔,而且這工具有開源出來,真的是很佛心。

Trivy 有提供 CLI ,可以搭配 CI 作映像檔掃描,它也有提供 Operator ,可以安裝到 Kubernetes/OpenShift 裡,在佈署容器以後,他會自動的掃描,並產出漏洞報告。

安裝

安裝相當簡單,這邊使用 helm 來安裝,主要是因為這樣好管理。安裝步驟是參考這份文件:Helm – Trivy Operator

加入 helm repository

helm repo add aqua https://aquasecurity.github.io/helm-charts/
helm repo update

安裝

helm install trivy-operator aqua/trivy-operator \
  --namespace trivy-system \
  --create-namespace \
  --set="trivy.ignoreUnfixed=true" \
  --version 0.10.1

檢查

helm list -n trivy-system
kubectl get deployment -n trivy-system

應該會看到以下的輸出

$ helm list -n trivy-system
NAME                 NAMESPACE           REVISION    UPDATED                                 STATUS      CHART                       APP VERSION
trivy-operator   trivy-system    1           2021-01-27 20:09:53.158961 +0100 CET    deployed    trivy-operator-0.10.1   0.10.1

$ kubectl get deployment -n trivy-system
NAME                 READY   UP-TO-DATE   AVAILABLE   AGE
trivy-operator   1/1     1            1           11m

使用

安裝完成以後,Trivy 會自動開始對所有 deployment/daemonset/pod 等的 image 去做掃描。

可以用以下指令去看掃描報告的列表,報告有兩種,一種是安全漏洞的 (vulnerabilityreports) ,一種是稽核的 (configauditreports)

kubectl get vulnerabilityreports -A -o wide
kubectl get configauditreports -A -o wide

後續佈署上去的,也會自動掃描。

要看報告內容,可以用 get/describe 來察看

kubectl get vulnerabilityreport replicaset-nginx-5fbc65fff-nginx -o yaml
kubectl describe configauditreport replicaset-nginx-5fbc65fff

報告預設是 24 小時後刪除,然後重新掃描,如果要調整,可以修改 trivy-operator 這個 deployment 裡的 OPERATOR_SCANNER_REPORT_TTL 環境變數。

後續

後續延伸的議題是 trivy 的掃描依據是什麼呢?若在封閉的環境下,能否使用?若可以使用,又該如何更新呢?

結論

感謝 AquaSecurity 提供的這個工具,讓容器平台能更安全。

kubectl scale

看完這篇 Using Kubectl Scale 所整理的。

基本使用方式

kubectl scale --replicas=3 deployment/nginx-hello

有條件的 scale,可以指定只有在已經有 n 個 pod 的情況下,才去 scale,例如

kubectl scale --current-replicas=3 --replicas=5 deployment/demo-deployment

這就是說,只有在目前已經有 3 個 pod 的情況下,才做 scale。這可以避免在資源已經不足的情況下還去做 scale,讓整個 k8s 叢集更加不穩定。

對多個資源做 scale

kubectl scale --replicas=5 deployment/app deployment/database

對 default 這個 namespace 裡所有可以 scale 的資源去做 scale

kubectl scale --all --replicas=5 --namespace=default deployment

也可以用 selector 去篩選,例如針對所有 app-name=demo-app 的 deployment 去做 scale

kubectl scale --replicas=5 --selector=app-name=demo-app deployment

要做 scale 還有其他方法:

  1. 更動 yaml 裡的 spec.replicas
  2. 使用 HPA (Horizontal Pod Autoscaling)

最佳實踐

  • 避免經常性的做 scale
  • scale 到 0 的時候,表示應用程式會停止服務
  • 確定選到正確的資源做 scale
  • 使用 --current-replicas 來避免意外。

yq

jq 這個工具可以用查詢語法去查詢 json 檔案裡的指定內容,很方便。基本上 yaml 可以直接轉換為 json ,因此若先把 yaml 轉換為 json,再用 jq 查詢也是可以的。

只是多了一道轉換,是稍嫌麻煩一點,那麼 yaml 檔案是不是也有類似的工具呢?

答案是有的,我找到兩個實作,一個是使用 python 實作,一個是使用 go 實作。

查詢語法跟 jq 很相似,這部份可以參考 jq https://stedolan.github.io/jq/

microk8s升級

使用過 OpenShift 跟 Kubernetes ,對於升級這件事情,就會比較小心。關於升級這件事情,可以參考 Kubernetes 升級 FAQ

microk8s 這部份蠻簡單的,官方的文件很清楚:Upgrading MicroK8s

單個節點

用 snap 更新就可以

sudo snap refresh microk8s --channel=1.21/stable

多個節點

Kubernetes 本身允許某些節點的版本較低 (service skew),這邊就一個節點、一個節點處理。

文件沒有提到順序,我的想法是先升級 master 節點,再升級 worker 節點,步驟都一樣。

先把 pod 都趕出來

microk8s kubectl drain <node> --ignore-daemonsets

用以下指令確認除了 daemonset 以外的 pod 都已經被終止。

microk8s kubectl get po -A -o wide

然後更新

sudo snap refresh microk8s --channel=1.21/stable

再用以下指令去確認 node 都升級完成

microk8s.kubectl get node

最後再將 node 設置為可以調度

microk8s kubectl uncordon <node>

這邊有篇實例可以參考:https://microk8s.io/docs/upgrade-cluster

RHEL8 系統憑證管理

RHEL8 管理系統 SSL 憑證,首先要安裝 ca-certificates 套件

yum install ca-certificates

這個套件主要是外部的憑證,會定期更新,若是在連線到外部有遇到憑證問題,通常更新這個套件就可以解決。

如果有需要安裝自簽憑證,可以複製到以下這兩個憑證路徑:

  • /etc/pki/ca-trust/source/anchors
  • /usr/share/pki/ca-trust-source/anchors

/etc/pki/ca-trust 的權限比較高。

複製完成,執行

update-ca-trust

要察看目前有放了哪些憑證,可以用 trust 指令

trust list

前面提到的複製、執行 update-ca-trust ,也可以用以下指令替代

trust anchor <path.to/certificate.crt>

參考資料

explainshell

前陣子看到有人介紹這網站,把指令貼上去以後,下方會出現指令跟引數的解說,覺得挺不錯。在懶得用 man 或用 google 查詢時,用這很方便。

使用方法很簡單,就在輸入欄貼上要查詢的指令,除了單個指令以外,也可以貼上有 pipe 這類的組合指令。貼上以後,下方就出現說明了,以後就不用一個一個查了。