CentOS를 만든다.
NAT GW - ipv4의 송신 전용 게이트웨이
송신전용인터넷게이트웨이 - ipv6의 송신 전용 게이트웨이
# hostnamectl set-hostname master
# curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
# sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/docker-ce.repo
# yum --enablerepo=docker-ce-stable -y install docker-ce-19.03.15-3.el7
# mkdir /etc/docker
# cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
# systemctl enable --now docker
# systemctl daemon-reload
# systemctl restart docker
# systemctl disable --now firewalld
# setenforce 0
# sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
# swapoff -a
# sed -i '/ swap / s/^/#/' /etc/fstab
# cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# kubernetes에서 k와 s사이 8글자, 약칭으로 k8s.로 부른다.
# sysctl --system
# reboot
# swapoff -a
옛날에는 swap보다는 HDD를 이용했지만, 최근에는 메모리와 유사한 SSD를 이용하여 저장장치를 이용하므로 이의 일부를 swap으로 이용하는 것이 의미가 있다 -> 성능 향상
하지만 k8s는 이러한 공간이 필요가 없어서 swap 공간을 0으로 만들어야 한다.
# sed -i '/ swap / s/^/#/' /etc/fstab
swap문구를 찾아서 앞에 #을 넣어 주석처리 해 준다.
# cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# kubernetes에서 k와 s사이 8글자, 약칭으로 k8s.로 부른다.
# sysctl --system
bridge기능을 넣는다.
커널 수정이므로 적용시키기 위해서 systctl을 해야 한다.
~~
nginx의 컨트롤러가 생성되어있다.
# mkdir ingress && cd $_
# vi ingress-deploy.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: foods-deploy
spec:
replicas: 1
selector:
matchLabels:
app: foods-deploy
template:
metadata:
labels:
app: foods-deploy
spec:
containers:
- name: foods-deploy
image: halilinux/test-home:v1.0
---
apiVersion: v1
kind: Service
metadata:
name: foods-svc
spec:
type: ClusterIP
selector:
app: foods-deploy
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: sales-deploy
spec:
replicas: 1
selector:
matchLabels:
app: sales-deploy
template:
metadata:
labels:
app: sales-deploy
spec:
containers:
- name: sales-deploy
image: halilinux/test-home:v2.0
---
apiVersion: v1
kind: Service
metadata:
name: sales-svc
spec:
type: ClusterIP
selector:
app: sales-deploy
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: home-deploy
spec:
replicas: 1
selector:
matchLabels:
app: home-deploy
template:
metadata:
labels:
app: home-deploy
spec:
containers:
- name: home-deploy
image: halilinux/test-home:v0.0
---
apiVersion: v1
kind: Service
metadata:
name: home-svc
spec:
type: ClusterIP
selector:
app: home-deploy
ports:
- protocol: TCP
port: 80
targetPort: 80
---로 구분해서 하나의 파일에 넣을 수 있다.
pod의 ip로 접속할 수 있다.
pod의 ip 범위를 처음에 init할 때 10.244.0.0/16 으로 했으므로 이 범위 내에 있다
foods-deploy~ 로 접속한다.
# vi ingress-config.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-nginx
annotations: # 주석 : 예: 저자, 연락처…
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http: #타겟 그룹 세팅과 유사하다.
paths:
- path: /foods
backend:
serviceName: foods-svc
servicePort: 80
- path: /sales
backend:
serviceName: sales-svc
servicePort: 80
- path:
backend:
serviceName: home-svc # /뒤 -> 디폴트 값은 home
servicePort: 80
/ 다음에 food가 들어오면 food의 service로, sales는 sales로, 아무것도 아니면 home으로 가도록 설정한다.