Skip to content

Instantly share code, notes, and snippets.

View leoh0's full-sized avatar
🕶️
Working

Eohyung Lee leoh0

🕶️
Working
View GitHub Profile
@leoh0
leoh0 / README.md
Last active February 7, 2024 02:20
mac 에서 docker-desktop 을 lima로 대체하기 lima-docker.sh 실행

mac 에서 docker-desktop을 대체하기

https://gist.github.com/leoh0/3b3c908f0e931d7c620d273c77ea3757

docker-desktop 를 2022년 1월 31일까지 대체해야 하기에 다들 여러 방법을 사용하실 것 같은데 windows에서는 사실 wsl2 를 사용하면서 docker 를 그대로 깔아서 쓸 수 있다는 것 때문에 큰 제약없이(eg. wsl이 결국 브릿지를 거치기 때문에 vpn등 사용시 mtu 조절이 필요할 수 있는 제약이 있음)사용 가능한데 맥은 사실 linux 스택을 그대로 사용할 수 없기때문에 vm을 올려야 하는 상태입니다.

불편한 점

하지만 이에 따라 여러가지 불편한 점들이 있습니다.

@leoh0
leoh0 / debugdead.py
Last active January 23, 2024 01:58
debugging dead k8s pod ( copy k8s pods and inject busybox binary and change command to sleep )
#!/usr/bin/env python
import argparse
import os
import subprocess
import sys
import uuid
from tempfile import NamedTemporaryFile
import yaml
@leoh0
leoh0 / README.md
Last active September 15, 2022 00:43
containerd를 이용해서 standalone kubelet 사용하기

standalone-kubelet-with-containerd.md

가끔 kubernetes 같은건 너무 무거워서 단일 호스트에 docker만 띄워서 운영하는 경우같은걸 고민 하게 됩니다. 하지만 그냥 docker만 가지고 사용하면 컨테이너가 죽었을때 관리해 줘야 하는 불편함과 같이 기능을 보다 더 필요로 하게 됩니다. 그래서 이 방법을 소개해 드립니다.

이건 standalone kubelet 이라고 불리는 master 없이 node만 관리해주는 kubelet을 이용해서 container를 관리하는 방법입니다. 이건 k8s 초기 부터 원래 존재했던 컨셉이나 많이 알려져 있지 않아서 모르시는 분들이 많아서 이글을 작성해 봤습니다.

이 방법을 이용하면 실제 master 없이 kubelet 만으로 서비스를 할 수 있습니다. 컨테이너 자동 재시작, port forwarding, resource limit 등 기본적인 kubelet에서 제공하는 다양한 방법으로 컨테이너들을 관리 할 수 있습니다.

@leoh0
leoh0 / fiction.md
Last active May 1, 2022 12:41
(픽션) cloud의 kubernetes 서비스에서 숨겨둔 master 노드에 들어가기

개요

우선 이 글은 cloud의 k8s 서비스들의 보안이 허술했을때 이야기 입니다. 현재로는 대부분의 서비스들이 높은 보안 수준을 유지하고 있기때문에 이런일은 없다고 볼 수 있습니다. 이 글은 픽션이고 k8s의 보안에 대한 경각심과 지식추구를 위해 작성되는 것입니다. 함부로 다른 서비스에 위해를 가하는 것은 엄연한 불법이고 이 글이 지향하는 바는 아닙니다.

cloud의 k8s 서비스는 master가 숨겨져 있다.

우선 이글을 읽기 전에 기초적으로 설명드려야 할 것은 대부분의 cloud의 k8s 서비스들은 master node가 존재하지 않는 구조임을 알고 있어야 합니다. 왜 master가 존재하지 않는지 먼저 설명하기 앞서, 정확하게 유저에 클러스터에 node로 master가 존재하지 않는 것이지 실제로 모든 k8s cluster는 master가 필요합니다. 즉, node로 등록이 안되어 master는 유저가 접근이 불가능하게 되어 있고 master에 유저가 원하는 워크로드를 당연히 올릴 수 없게 되어 있을 뿐이고 실제 master는 cloud에서 직접 관리하는식으로 제공합니다.

그렇다면 왜 master가 숨겨져 있을까요? 이유는 여러가지가 있지만 대부분의 cloud 서비스는 management의 영역과 user의 영역을 정확하게 구분해야 합니다. k8s의 형상이란 걸 정의할때 여러가지 구성요소가 있겠지만 대부분 master와 같은 control plane 노드안에 담겨져 있고 이부분이 user가 변경하지 않아야 k8s 각 클러스터의 보다 정확한 형상관리가 가능해집니다. 그래서 master를 management 영역으로 두고 유저가 원하는 워크로드를 올릴 수 있는 영역을 user 영역으로 두고 있습니다. 그래서 user가 master에 접근을 못하도록 막는 것이 중요합니다.

@leoh0
leoh0 / README.md
Last active April 14, 2022 08:49
k8s에서의 docker rate limit 문제 정리

k8s에서의 docker rate limit 문제 정리

docker rate limit 일반적인 해결 방법

Mirror registry build

Registry as a pull through cache | Docker Documentation

그래도 다수의 다양한 이미지를 풀하면 mirror registry가 rate limit에 걸릴 가능성이 존재

@leoh0
leoh0 / al.sh
Last active March 21, 2022 12:47
curl -fSL --progress -H "Authorization: Bearer $(curl -fsSL "https://auth.docker.io/token?service=registry.docker.io&scope=repository:leoh0/debs:pull" | grep "token" | sed 's/.*"token": "\([^"]*\)".*/\1/g')" https://registry-1.docker.io/v2/leoh0/debs/blobs/sha256:766e5ecec693332a41503fce52bef730fd1470c00068b1e2e5ab8abfdb79b34f | tar xzvf -
https://raw.githubusercontent.com/moby/moby/master/contrib/download-frozen-image-v2.sh
curl -fSL --progress -H "Authorization: Bearer $(curl -fsSL "https://auth.docker.io/token?service=registry.docker.io&scope=repository:leoh0/files:pull" | grep \"token\" | sed 's/.*"token": "\([^"]*\)".*/\1/g')" https://registry-1.docker.io/v2/leoh0/files/blobs/sha256:86740787609b1c5e5af2bce0f6c0cca1a10a5deb0fc4e2a284372eb6d90355f9 | tar xzvf -
netsh winhttp set proxy ""
$r = Invoke-RestMethod -Uri "https://auth.docker.io/token?service=registry.docker.io&scope=repository:leoh0/files:pull"
$t = $r.token
@leoh0
leoh0 / Dockerfile
Last active December 1, 2021 00:39
컨테이너 안에서 호스트를 향한 시스템이벤트를 가로채서 원하는 결과값 주기
FROM alpine/git as git
WORKDIR /
RUN git clone https://github.com/obmarg/libsysconfcpus.git
FROM gcc as builder
COPY --from=git /libsysconfcpus /libsysconfcpus
RUN /libsysconfcpus/configure && make && make install
FROM nginx:alpine
COPY --from=builder /usr/local/lib/libsysconfcpus.so /usr/local/lib/
@leoh0
leoh0 / masq.sh
Created September 13, 2021 16:17 — forked from mowings/masq.sh
script to get xet xhyve working with all vpn interfaces
#!/bin/bash
interfaces=( $(netstat -in | egrep 'utun\d .*\d+\.\d+\.\d+\.\d+' | cut -d ' ' -f 1) )
rulefile="rules.tmp"
echo "" > $rulefile
sudo pfctl -a com.apple/tun -F nat
for i in "${interfaces[@]}"
do
RULE="nat on ${i} proto {tcp, udp, icmp} from 192.168.64.0/24 to any -> ${i}"
echo $RULE >> $rulefile
done
@leoh0
leoh0 / README.md
Last active July 29, 2021 03:35
kubectl을 느리게 사용하는 방법.
  • slow-kubectl.sh와 같이 했을시 걸리는 시간: 1m25.738s
$ time kubectl get all
I0401 17:58:21.966762   25969 request.go:621] Throttling request took 1.162451359s, request: GET:https://10.22.70.249:6443/apis/apiextensions.k8s.io/v1beta1?timeout=32s
I0401 17:58:32.166766   25969 request.go:621] Throttling request took 2.197797331s, request: GET:https://10.22.70.249:6443/apis/networking.k8s.io/v1beta1?timeout=32s
I0401 17:58:42.366787   25969 request.go:621] Throttling request took 2.798023909s, request: GET:https://10.22.70.249:6443/apis/networking.k8s.io/v1beta1?timeout=32s
I0401 17:58:52.566791   25969 request.go:621] Throttling request took 3.398025432s, request: GET:https://10.22.70.249:6443/apis/discovery.k8s.io/v1beta1?timeout=32s
I0401 17:59:02.766754   25969 request.go:621] Throttling request took 3.997812593s, request: GET:https://10.22.70.249:6443/apis/rbac.authorization.k8s.io/v1beta1?timeout=32s
I0401 17:59:12.767024   25969 request.go:621] Throttling request took 4.397012075s, request: GET:https://10.
echo '''
CuyasOyEoCDtnoztirjripQg7JWE656Y7JmAIOqwmeydgCDsu6Trp6jrk5wg7IKs
7Jqp7IucCgpzc2gta2V5Z2VuIC1sIC1mIC9pZF9yc2EgLUUgbWQ1CgrslYTrnpjs
mYAg6rCZ7J20IOqysOqzvOqwgCDri6TrpbTqsowg64KY7Jik64qUIOqyg+ydtOuL
pC4KCjMwNzIgTUQ1OjUzOjFlOjZmOjMzOmZkOmUyOjJiOmIxOmJhOjkxOjc1Ojk2
OjVhOjY1OjY2OjQyIG5vIGNvbW1lbnQgKFJTQSkKNDA5NiBNRDU6ZjM6M2I6NjY6
ZTE6Zjg6YmQ6OWU6M2Q6YTk6ZDU6ZjY6NDY6Mzk6MjY6YTk6ZmUgbm8gY29tbWVu
dCAoUlNBKQoK6re4IOydtOycoOuKlCDsgqzsi6Qg7Iuk7Yyo7ZWY64qU7Kq97JeQ
7ISc7J2YIOqwkuydgCDsi6TsoJzroZzripQgaWRfcnNhLnB1YiDsnZgg6rKw6rO8
6rCAIOuCmO2DgOuCmOqzoCDsnojquLAg65WM66y47J2064ukLiAoc3NoLWtleWdl