KubeWeekly #179

KubeWeeklyは毎週Kubernetesに関する興味深いニュースを提供しています。（https://kubeweekly.io/ ）この記事は 2019/08/07に発行された [Kube Weekly #179](https://kubeweekly.io/2019/08/07/kubeweekly-179/ )を読んで、感じたことをメモ的にまとめたものです。
私の勘違いや説明不足による誤解もあるかと思いますので、この記事読んで「おっ」と思ったらURLを辿って本文を確認してください。

(過去のKubeWeekly読書メモは[こちら](https://qiita.com/tags/kubeweekly))

# The Headlines

## [Mesosphere is now D2iQ](https://d2iq.com/blog/mesosphere-is-now-d2iq)

Mesosphereが社名を変更してD2iQとしたようだ。（読み方はDay-Two-I-Qらしい）
いわゆるDay2 Operationについて支援することが企業のミッションだということでこの名前に変えたらしい。

製品名を社名にすると、他の業務にも取り組むようになるとこういう社名変更が伴うことがあるんですね。
Mesosphereというソリューションは引き続き提供されるようです。

（知らなかったけど他にもKsphereやDatasphereといったソリューションがあるらしい）

## Open Sourcing the Kubernetes Security Audit - Cloud Native Computing Foundation
<table>
<tr>
  <td colspan="2"><a href="https://www.cncf.io/blog/2019/08/06/open-sourcing-the-kubernetes-security-audit/">Open Sourcing the Kubernetes Security Audit - Cloud Native Computing Foundation</a></td>
</tr>
<tr>
  <td><img src="https://www.cncf.io/wp-content/uploads/2017/12/icon_cncf_twitter.png"></td>
  <td>Last year, the Cloud Native Computing Foundation (CNCF) began the process of performing and open sourcing third-party security audits for its projects in order to improve the overall security of...</td>
</tr>
</table>

CNCFが配下のプロジェクトに対してセキュリティ監査を行った結果について。
まず、パイロットプロジェクトとして対象となったのはCordDNS、Envoy、Prometheusです。その結果がうまくいったということで次にKubernetesについても行われました。

その結果については[sig-security-audit](https://github.com/kubernetes/community/tree/master/wg-security-audit)にまとめられています。

# The Technical

## [v1.13.9, v1.14.5, v1.15.2 released to address CVE-2019-11247, CVE-2019-11249](https://groups.google.com/forum/#!topic/kubernetes-security-announce/vUtEcSEY6SM)

2種類の脆弱性について議論しているGoogle Groupのスレッド

- [CVE-2019-11247: API server allows access to custom resources via wrong scope](https://github.com/kubernetes/kubernetes/issues/80983)
  - クラスタスコープのCRD周りのアクセス制限に問題があったようです。あるネームスペースにのCRDにしか権限がないユーザでもクラスタスコープのCRにアクセスできてしまっていたようです。
- [CVE-2019-11249: Incomplete fixes for CVE-2019-1002101 and CVE-2019-11246, kubectl cp potential directory traversal](https://github.com/kubernetes/kubernetes/issues/80984)
  - `kubectl cp`によってクライアント側のファイルを変更したり、ファイルを作詞したりできてしまうようです。
  - [以前紹介していたやつ](https://qiita.com/inajob/items/e88ef779952ea38604fd#incomplete-fix-leads-to-new-kubernetes-bug)です

最新版に更新することでこれらは解消します。

## Running HA Kubernetes clusters on AWS using KubeOne
<table>
<tr>
  <td colspan="2"><a href="https://www.loodse.com/blog/2019-07-25-running-ha-kubernetes/">Running HA Kubernetes clusters on AWS using KubeOne</a></td>
</tr>
<tr>
  <td><img src="https://www.loodse.com/images/blog/2019-07-25/image1.png"></td>
  <td>

In a previous blog post, we talked about KubeOne and how it makes your highly available Kubernetes cluster easier to manage. In this post, …</td>
</tr>
</table>

KubeOneという仕組みを使ったHA構成のKubernetesクラスタの作成方法。
Terafformと連携するようで、Terraformを使って簡単にクラウド環境にKubernetesクラスタを構築できます。

こうして構築したKubernetesは内部に自身を更新する仕組みを持ちます。
例えばMachineDeploymentリソースを編集することで、クラスタをスケールさせることができます。

Kubernetesを管理するためにKubernetesを使う、というちょっと面白い構成だなと思いました。

## Migrating RabbitMQ to Kubernetes without downtime
<table>
<tr>
  <td colspan="2"><a href="https://medium.com/flant-com/migrating-rabbitmq-to-kubernetes-without-downtime-3b02a97a9cdf">Migrating RabbitMQ to Kubernetes without downtime</a></td>
</tr>
<tr>
  <td><img src="https://miro.medium.com/max/1200/1*HShoI3FdgxeYmyzWRcF-hQ.png"></td>
  <td>General approach to the migration as well as practical steps to reproduce it.</td>
</tr>
</table>

Kubernetes上でRabbitMQに無停止で切り替える方法を紹介しています。
古いRabbitMQと新しいもので、大きなクラスタを組み、データの同期が完了したら、RabbitMQを利用しているアプリケーションの向き先を新しいものに変更し、最終的に古いRabbitMQのインスタンスを落とすことで、これを実現することができるようです。

簡単なデモの手順も紹介してあるので、実際に試してみたい方は元記事を参照してみてください。

## [Tools and Methods for Auditing Kubernetes RBAC Policies](https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2019/august/tools-and-methods-for-auditing-kubernetes-rbac-policies/)

Kubernetesの認証・認可の仕組みを紹介し、それらをうまく管理するためのツールを紹介している。

- 標準で提供されている `kubectl auth can-i XXX`
  - `kubectl auth can-i --list` が便利
- [kubectl who-can](https://github.com/aquasecurity/kubectl-who-can)
  - どの権限だとこれができるか？という軸で調べられる
- [rakkess](https://github.com/corneliusweig/rakkess) `kubectl access-matrix`
  - CUIでみやすい権限表を出力
- [rback](https://github.com/team-soteria/rback)
  - 権限周りを図示した画像を出力
- [rbac-view](https://github.com/jasonrichardsmith/rbac-view)
  - Webベースのみやすい権限表
- rbac-lookup, pod_ehell, node_admin

## Writing Your First Kubernetes Operator
<table>
<tr>
  <td colspan="2"><a href="https://medium.com/faun/writing-your-first-kubernetes-operator-8f3df4453234">Writing Your First Kubernetes Operator</a></td>
</tr>
<tr>
  <td><img src="https://miro.medium.com/max/1200/0*Y2R4SD9i_Fmpld7v"></td>
  <td>In this article, we’ll see how to build and deploy your first Kubernetes Operator using the Operator SDK.</td>
</tr>
</table>

Operator SDKを使ったKubernetesのOperator作成のチュートリアル。
PodSetというReplicaSetっぽいリソースを作成している。

## How to Remediate Kubernetes Security Vulnerability: CVE-2019-11247 · StackRox: Container Security for Containers and Kubernetes
<table>
<tr>
  <td colspan="2"><a href="https://www.stackrox.com/post/2019/08/how-to-remediate-kubernetes-security-vulnerability-cve-2019-11247/">How to Remediate Kubernetes Security Vulnerability: CVE-2019-11247 · StackRox: Container Security for Containers and Kubernetes</a></td>
</tr>
<tr>
  <td><img src="https://res.cloudinary.com/stackrox/v1565058513/k8s-vuln-blog-banner_ge2nei.png"></td>
  <td>CVE-2019-11247 discloses a serious vulnerability in the K8s API that could allow users to read, modify or delete cluster-wide custom resources, even if they only have RBAC permissions for namespaced resources.</td>
</tr>
</table>

脆弱性 CVE-2019-11247への対応方法。
別の記事でも書きましたが、この脆弱性はクラスタスコープのCRD周りのアクセス制限に問題があったようです。あるネームスペースにのCRDにしか権限がないユーザでもクラスタスコープのCRにアクセスできてしまっていたようです。

対象方法はKubernetesを最新にアップデートするのが一番ですが、それができない場合はRoleで許可するリソースを`*`などにせず、全て具体的な名前を書くという方法があるようです。

また、この記事ではこの脆弱性をついて権限がないはずなのにClusterRoleを削除できてしまう例を紹介しています。

## Increasing resilience in Kubernetes
<table>
<tr>
  <td colspan="2"><a href="https://medium.com/kudos-engineering/increasing-resilience-in-kubernetes-b6ddc9fecf80">Increasing resilience in Kubernetes</a></td>
</tr>
<tr>
  <td><img src="https://miro.medium.com/max/1200/0*Oue3X_Y3apY-n2gM"></td>
  <td>High availability and resilience are key features of Kubernetes. But what do you do when your kubernetes cluster starts to become unstable…</td>
</tr>
</table>

サービス運用中のKubernetesクラスタのNodeが頻繁に異常終了するようになったという事例。
Googleのサポートとやり取りをしながら解決していったようだが、その過程で、例えばDeploymentでreplicaが1のものなど、Nodeの障害によってサービスが止まってしまうような設定を見直したという記事。

Kubernetesを使って耐障害性のあるサービスを提供する基本的な内容がいくつか紹介してある。

肝心の異常終了の原因はReadinessProbeに設定したプログラムが正しく終了しないために、PIDが溢れてしまうというものだったようだ。
Kubernetes1.14でベータとなったPID limitの機能などを使うと、利用できるPID数を制限することができるため、Node全体がおかしくなるようなことは防げるようになっています。

## Istio Security Basics: Running Microservices on Zero-Trust Networks · StackRox: Container Security for Containers and Kubernetes
<table>
<tr>
  <td colspan="2"><a href="https://www.stackrox.com/post/2019/08/istio-security-basics-running-microservices-on-zero-trust-networks/">Istio Security Basics: Running Microservices on Zero-Trust Networks · StackRox: Container Security for Containers and Kubernetes</a></td>
</tr>
<tr>
  <td><img src="https://res.cloudinary.com/stackrox/v1565040348/istio-security-blog-banner_jqgxiv.png"></td>
  <td>At its most hardened, Istio provides a large chunk of the functionality needed to support the ability to run microservices securely on zero-trust networks.</td>
</tr>
</table>

Zero Trust Networkの考え方を基にIstioの様々な機能を紹介している。

- 相互認証：mTLS
- コネクションごとのポリシーチェック：Policy Checks
- クラスタ外への通信の制御：Egress Traffic Control

istioはセキュリティの便利機能の集合だが、これだけではダメで、KubernetesのNetworkPolicyや、Istioそのものの設定をRBACなどでユーザから保護するなど、総合的なセキュリティ対策には様々な機能の組み合わせが必要となる。

## Kubernetes pod autoscaler using custom metrics | Sysdig
<table>
<tr>
  <td colspan="2"><a href="https://sysdig.com/blog/kubernetes-autoscaler/">Kubernetes pod autoscaler using custom metrics | Sysdig</a></td>
</tr>
<tr>
  <td><img src="https://sysdig.com/wp-content/uploads/2019/08/kubernetes_scaler_diagram.png"></td>
  <td>You can use any Sysdig metric as the pivot value for your Kubernetes autoscaler. This post will show you how to implement required API server extension.</td>
</tr>
</table>

Sysdig Monitorを使ってカスタムメトリクスを基にHorizontalPodAutoscalerを動作させる方法を紹介。

## Make your container images safer and more reliable with Harbor, the cloud native registry | Mirantis
<table>
<tr>
  <td colspan="2"><a href="https://www.mirantis.com/blog/make-your-container-images-safer-and-more-reliable-with-harbor-the-cloud-native-registry/">Make your container images safer and more reliable with Harbor, the cloud native registry | Mirantis</a></td>
</tr>
<tr>
  <td>Container registries such as DockerHub have made container application development much easier, but they have introduced another problem: how do you know | Mirantis</td>
</tr>
</table>

HarborのWebiner（見ていない）
概要を見る限り、Access Controlや脆弱性スキャン・イメージへの署名などが気になる。

## OPA Gatekeeper: Policy and Governance for Kubernetes
<table>
<tr>
  <td colspan="2"><a href="https://kubernetes.io/blog/2019/08/06/opa-gatekeeper-policy-and-governance-for-kubernetes/">OPA Gatekeeper: Policy and Governance for Kubernetes</a></td>
</tr>
<tr>
  <td><img src="https://kubernetes.io//images/blog/2019-08-06-opa-gatekeeper/v3.png"></td>
  <td>Authors: Rita Zhang (Microsoft), Max Smythe (Google), Craig Hooper (Commonwealth Bank AU), Tim Hinrichs (Styra), Lachie Evenson (Microsoft), Torin Sandall (Styra)
The Open Policy Agent Gatekeeper project can be leveraged to help enforce policies and strengthen governance in your Kubernetes environment. In this post, we will walk through the goals, history, and current state of the project.
The following recordings from the Kubecon EU 2019 sessions are a great starting place in working with Gatekeeper:</td>
</tr>
</table>

[Open Policy Agent Gatekeeper](https://github.com/open-policy-agent/gatekeeper)の紹介。

歴史を辿るとGatekeeperは現在3.0となっている。
3.0ではCRDでRegoのテンプレートを定義して、それを基にしたCRでテンプレートに入れるパラメータや、対象となるリソースを記述するという方式らしい。
ルールが増えるたびにCRDが増えるというのは今まで見たCRDの使い方とは違い印象的です。

Gatekeeperはリソースの投入時にAdmission Webhookでチェックをするものとして作られていた印象があったが、3.0ではAuditという機能があり、作成済みのリソースについてもルールに合致するかを定期的に調べることができるようだ。

# The Editorial

## Attacking and Defending Kubernetes, with Ian Coldwater (Kubernetes Podcast from Google)
<table>
<tr>
  <td colspan="2"><a href="https://kubernetespodcast.com/episode/065-attacking-and-defending-kubernetes/">Kubernetes Podcast from Google</a></td>
</tr>
<tr>
  <td><img src="https://kubernetespodcast.com/_assets/images/Kubernetes-Podcast-Logo_1400x1400.png"></td>
</tr>
</table>

Kubernetes Podcast 今回はKubernetesのセキュリティについての話。

## Mesosphere changes name to D2IQ, shifts focus to Kubernetes, cloud native – TechCrunch
<table>
<tr>
  <td colspan="2"><a href="http://social.techcrunch.com/2019/08/05/mesosphere-changes-name-to-d2iq-shifts-focus-to-kubernetes-cloud-native/">Mesosphere changes name to D2IQ, shifts focus to Kubernetes, cloud native – TechCrunch</a></td>
</tr>
<tr>
  <td><img src="https://techcrunch.com/wp-content/uploads/2019/08/GettyImages-1063730694.jpg?w=680"></td>
  <td>Mesosphere was born as the commercial face of the open-source Mesos project. It was surely a clever solution to make virtual machines run much more efficiently, but times change and companies change. Today the company announced it was changing its name to Day2IQ, or D2IQ for short, and fixing its s…</td>
</tr>
</table>

Mesosphere社名変更についての記事。大体はThe Headlinesの公式記事に書いてあった内容と同じでした。

オペレータを簡単に作るためのツール[Kudo](https://kudo.dev/community/)がベータになったそうです。

## Powering Edge With Kubernetes: A Primer - Container Journal
<table>
<tr>
  <td colspan="2"><a href="https://containerjournal.com/2019/08/01/powering-edge-with-kubernetes-a-primer/">Powering Edge With Kubernetes: A Primer - Container Journal</a></td>
</tr>
<tr>
  <td><img src="https://containerjournal.com/wp-content/uploads/2019/03/Kubernetes-Beyond-Horizon.jpg"></td>
  <td>Kubernetes increasingly is being adopted at the infrastructure edge to connect to the cloud for processing the data from IoT devices.</td>
</tr>
</table>

Kubernetesをエッジでも使おうという話。何が求められているのか？なぜKubernetesなのか？という話に始まり、3つの典型的なアーキテクチャを紹介している。

- EdgeでKubernetesクラスタをそのまま動かすk3s方式
- EdgeではEdgeHubというエッジ用のゲートウェイを用意し、コントロールプレーンはクラウド上で動かす KubeEdge方式
- 同じくクラウド上でコントロールプレーンを動かし、EdgeデバイスとはVirtualKubeletを使う方式

それぞれをバラバラに見たことはありましたが、このように整理されるとKubernetesのEdgeでの活用方法のイメージが少しわかった気になりました。

## How Can Kubernetes Be Used for Genetic Analysis?
<table>
<tr>
  <td colspan="2"><a href="https://medium.com/@Alibaba_Cloud/how-can-kubernetes-be-used-for-genetic-analysis-26167584ea77">How Can Kubernetes Be Used for Genetic Analysis?</a></td>
</tr>
<tr>
  <td><img src="https://miro.medium.com/max/1200/0*_kAE6-_Bb1vSHVzS.png"></td>
  <td>This article details how Alibaba Cloud Container Service for Kubernetes can be used for genetic analysis</td>
</tr>
</table>

Kubernetesを使って遺伝子の解析を行うための要件と、Alibaba Cloud genetic data serviceの紹介。
（医学用語が非常に多く斜め読みですが・・）

## Diversity Scholarship Series: Experiencing Kubernetes Day India 2019 - Cloud Native Computing Foundation
<table>
<tr>
  <td colspan="2"><a href="https://www.cncf.io/blog/2019/08/05/diversity-scholarship-series-experiencing-kubernetes-day-india-2019/">Diversity Scholarship Series: Experiencing Kubernetes Day India 2019 - Cloud Native Computing Foundation</a></td>
</tr>
<tr>
  <td><img src="https://miro.medium.com/max/1376/1*TfV6aWUDr2qWNeE5R8xVlg.jpeg"></td>
  <td>Guest post by Atibhi Agrawal, originally published on Medium.  I had been hearing the buzzword Kubernetes and cloud computing for a long time but I had no idea what it was. One day my...</td>
</tr>
</table>

Diversity ScholarshipでExperiencing Kubernetes Day India 2019に参加した人の記事。

## Kubernetes’ Move to the Edge: A Great Thing - Container Journal
<table>
<tr>
  <td colspan="2"><a href="https://containerjournal.com/2019/08/02/kubernetes-move-to-the-edge-a-great-thing/">Kubernetes’ Move to the Edge: A Great Thing - Container Journal</a></td>
</tr>
<tr>
  <td><img src="https://containerjournal.com/wp-content/uploads/2019/03/Tetrate-Launches-Istio.jpg"></td>
  <td>Kubernetes has rapidly become a key ingredient in edge computing—a proven and effective runtime platform to help solve unique challenges.</td>
</tr>
</table>

Edgeコンピューティングの必要性と、そこでなぜKubernetesが役にたつかという記事。

## Introducing the PLONK Stack for Cloud Native Developers
<table>
<tr>
  <td colspan="2"><a href="https://www.openfaas.com/blog/plonk-stack/">Introducing the PLONK Stack for Cloud Native Developers</a></td>
</tr>
<tr>
  <td><img src="https://www.openfaas.com/images/2019-intro-plonk/map-reader.jpg"></td>
  <td>You’ve heard of LAMP, JAM, and MEAN, but what is the PLONK stack? And why should you be considering it for your Cloud Native Applications?</td>
</tr>
</table>

OpenFaaSによる、PLONKという新しいアプリケーションスタックの紹介。

- Prometheus
- Linkerd
- OpenFaaS
- NATS
- Kubernetes

のことらしい。この記事ではこれらのプロダクトについて簡単に説明している。

## Introduction to Service Meshes on Kubernetes and Progressive Delivery
<table>
<tr>
  <td colspan="2"><a href="https://www.weave.works/blog/introduction-to-service-meshes-on-kubernetes-and-progressive-delivery">Introduction to Service Meshes on Kubernetes and Progressive Delivery</a></td>
</tr>
<tr>
  <td><img src="https://www.weave.works/assets/images/blt753435a38e983617/service-mesh-traffic-overview.png"></td>
  <td>Stefan Prodan recently delivered a talk on what a service mesh is, which ones are available and how they differ. He then described how to use a service mesh for Progressive Delivery and other advanced deployments to Kubernetes.</td>
</tr>
</table>

サービスメッシュとは何か？から始まり
サービスメッシュがないと何が困るのか？

- サービス間でのセキュリティが保てない
- マイクロサービス間のレイテンシをトレースするのが難しい
- ロードバランスの方法が限られる

サービスメッシュは何を提供してくれるのか？
各サービスメッシュ実装の違いは何か？(Istio, AWS App Mesh, Likerd v2, Consul Connect)

progressive deliveryの一例としてCannaryデプロイの説明

など内容盛りだくさんの記事。
もともとはWeave Online User Groupのために作成された動画のようだ。