光のエンジニア雑食記

光も闇も、あるんだよ

RaspberryPi 3 B+を構築してkubeadmでkubernetesを構築し、googleアカウントでOpenID Connectする

macでやりました

 インストール

raspbianのインストール

  1. https://www.raspberrypi.org/downloads/raspbian/ から、 Raspbian Stretch Lite のzipをダウンロード
  2. MicroSDをmacにさし、 sudo diskutil umount /dev/disk2s1 しておく
  3. Raspbian Stretch Lite の zip 展開を行い、MicroSDに焼き込む sudo dd bs=1m if=~/Downloads/2018-11-13-raspbian-stretch-lite.img of=/dev/disk2
  4. SSHを有効にする: touch /Volumes/boot/ssh
  5. 起動してSSHする
  6. ID: pi
  7. PW: raspberry

cgroupの設定

/boot/cmdline.txt に、 cgroup_enable=cpuset cgroup_enable=memory を追加しておく。

以下は例

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=af816d3b-02 rootfstype=ext4 cgroup_enable=cpuset cgroup_enable=memory elevator=deadline fsck.repair=yes rootwait

Docker のインストール

sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl https://download.docker.com/linux/raspbian/gpg | sudo apt-key add -
cat << EOL | sudo tee /etc/apt/sources.list.d/docker.list
deb [arch=armhf] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") $(lsb_release -cs) stable
EOL
    
sudo apt-get -y update
sudo apt-get -y upgrade
sudo apt-get -y install docker-ce

swapの無効

sudo dphys-swapfile swapoff
sudo dphys-swapfile uninstall
sudo update-rc.d dphys-swapfile remove

kubeadmのインストール

curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

kubernetes のセットアップ

sudo kubeadm config images pull
sudo kubeadm init --pod-network-cidr=10.244.0.0/16

googleのoidcに対応させる

https://console.cloud.google.com/apis/credentials より、 OAuth クライアント ID の作成 -> その他 で作成する。 f:id:suzutan0s2:20190330030047p:plain

移行の設定は、以下の値を例にする

  • client-id: 962700372558-u0gl7j6ea2cogcbn7hapbm6qgmbjo8o0.apps.googleusercontent.com
  • client-secret: kELGAsnPJy4lFj418bCOLucu

apiserver

  • kube-apiserver の引数に以下を追加する。
  • 場所は /etc/kubernetes/manifests/kube-apiserver.yaml
  • oidc-username-prefixは任意。設定しなければ何も入らない。
    - --oidc-issuer-url=https://accounts.google.com
    - --oidc-client-id=962700372558-u0gl7j6ea2cogcbn7hapbm6qgmbjo8o0.apps.googleusercontent.com
    - --oidc-username-claim=email
    - "--oidc-username-prefix=oidc:"

kubectl側のoidc設定をする

  • google用oidcヘルパーのインストールとtokenまわりの設定
  • -w をつけると直接~/.kube/config に追加してくれる。
  • -wを書かない場合は標準出力に設定内容が出るので自分で追加する。
go get github.com/micahhausler/k8s-oidc-helper
k8s-oidc-helper --client-id 962700372558-u0gl7j6ea2cogcbn7hapbm6qgmbjo8o0.apps.googleusercontent.com --client-secret kELGAsnPJy4lFj418bCOLucu -w

メールアドレスでkubeconfigのuserに登録されているので、set-contextする

kubectl config set-context r8s --cluster=r8s --user=<k8s-oidc-helperで認証したメールアドレス>

これだけだとRBACに設定がないためなにもできない。

そのため、とりあえず雑にcluster-admin権限を付与する。

kubectl create clusterrolebinding --clusterrole=cluster-admin --user=oidc:<k8s-oidc-helperで認証したメールアドレス> admin