Namespace
: 하나의 k8s Cluster를 여러개 논리적인 단위(namespace)로 나누어서 개체를 관리하는 것

(App 배포 및 Project를 진행할 때 편리)

 

namespace 생성하기

kubectl create ns globalvision
- kubectl run myhome --image=nginx --port 80 -n globalvision

- kubectl run mygame --image pengbai/docker-supermario --port 8080 -n globalvision
- kubectl get pod -n globalvision : 확인

 

서비스 생성

kubectl api-resources | grep -i service : Namespace를 지정해야 하는지 확인.(namespace 부분이 true라면 지정해야 함)

- kubectl expose pod mygame --type NodePort --port 8080 -n globalvision

외부에서 nodeport로 접속

 

1. Polaris dashboard 생성

- kubectl apply -f https://github.com/fairwindsops/polaris/releases/download/5.2.0/dashboard.yaml

- kubectl expose -n polaris deployment polaris-dashboard --type=NodePort --name=polaris2 --port=8080
- kubectl get svc -n polaris

 

서비스 포트 확인(polaris2)
NodePort로 웹 브라우저에서 접속

 

Polaris dashboard 앱 삭제

-  kubectl delete ns polaris

 

 

 

2. Chaos Mesh 생성(script설치)

-  curl -o chaos.sh https://mirrors.chaos-mesh.org/v2.0.1/install.sh : 다운로드

curl -sSL https://mirrors.chaos-mesh.org/v2.0.1/install.sh | bash : 설치

 

kubectl get all -n chaos-testing
Nodeport 로 웹 브라우저에서 접속

Chaos Mesh dashboard 삭제

kubectl delete ns chaos-testing

 

--> k8s에서 App 배포할 때는 App 만든 개발자는 App 대한 고유한 namespace 만들어서 App 배포하도록 하는 경향이 있다. 이렇게 하면 어떤 App 설치 되었는지 쉽게 알  있고 삭제할 때도 편리하다.

 

 

※ Namespace 삭제
 
objectcontroller삭제할 때는 각각 하나씩 삭제해도 되지만 한꺼번에 몽땅 삭제할 있다
 
1. yaml 파일로 만들었다면 yaml 파일로 삭제하면 된다
kubectl apply -f http://down.cloudshell.kr/k8s/metallb.yaml
kubectl delete -f http://down.cloudshell.kr/k8s/metallb.yaml
 
2. namespace삭제하면 거기에 들어있는 모든 objectcontroller가 한꺼번에 삭제된다.

-  kubectl delete -f http://down.cloudshell.kr/k8s/namespace.yaml
kubectl delete ns globalvision
 
 
 

'Study > Cloud' 카테고리의 다른 글

Kubernetes - Service  (0) 2022.07.22
Kubernetes - Pod  (0) 2022.07.21
Kubernetes - yaml  (0) 2022.07.21
Kubernetes - Deployment & Service  (0) 2022.07.20
Kubernetes 소개 및 설치  (0) 2022.07.19

하나의 Pod 안에 여러 개의 Container를 두고 싶을 때는 yaml 파일을 사용해야 한다.

 

YAML
: YAML Ain't Markup Language
YAML은 문서 마크업이 아닌 데이터 직렬화가 핵심이다.

 

• YAML 기본문법
(기본형식: Field)
기본 옵션 : apiVersion / kind / metadata / spec

 

• 각 Object 및 Controller의 현재 사용하는 버전 확인하기

- kubectl api-resources


• Object 및 Controller의 사용 가능한 Field가 어떤 것들이 있는지 확인하기

: kubectl explain 명령어 사용

- kubectl explain pods
- kubectl explain pods.metadata(항목별 상세 정보 확인)
 
 
 

※ pod-sample.yaml다운로드하여 실행하기

wget http://down.cloudshell.kr/k8s/lab/pod/pod-sample.yaml
k8s 디렉토리의 pod-sample.yaml 파일
kubectl apply -f pod-sample.yaml
 kubectl get pod -o wide
sample pod가 만들어 졌다.

 
삭제할 때는 다시 pod-sample.yaml사용한다
kubectl delete -f pod-sample.yaml
 kubectl get pod -o wide
 
 
• YAML 구문의 유효성 확인 (http://www.yamllint.com/)

 

'Study > Cloud' 카테고리의 다른 글

Kubernetes - Pod  (0) 2022.07.21
Kubernetes - Namespace  (0) 2022.07.21
Kubernetes - Deployment & Service  (0) 2022.07.20
Kubernetes 소개 및 설치  (0) 2022.07.19
Docker Image Layer  (0) 2022.07.18

Pod

    - 여러 개의 Container를 운영하는 가장 기초적인 모듈

Replicaset

    - Replicaset은 동일 Pod에 대한 가용성을 안정적으로 보장받기 위한 모듈

    - Pod의 개수를 유지시켜 줌

Deployment 

    - 같은 Pod가 여러개의 Node에 배포되는 형태 

    - Pod와 Replicaset에 대한 선언과 업데이트를 관리해주는 모듈

    - 사용이유 : Pod가 죽을 경우를 대비하여 서버를 보호 차원에서 사용

 

Nginx Pod을 K8S cluster에 배포하기

• K8S 환경에서 실행중인 Pod은 한 개 이상의 container로 구성되며, 그 Pod에 있는 docker container들은 storage와 Network을 공유한다


• mynginx라는 deployment 생성하기 >> 이와 함께 pod도 생성됨

- kubectl create deployment mynginx --image=nginx
- kubectl get deployments.apps
- kubectl get pod -o wide (wide 옵션 : 어느 node에 무슨 ip 인지 확인)

pod ip는 10.44.0.1 이며 node1에서 동작 중이다.
deployment 를 생성했는데 , Pod, ReplicaSet 까지 동시에 생성되었음
시간이 지나면, 새로운 pod이 node3에서 생성되어 동작된다.

10.47.0.0 : weave-net IP

deployment, replicaset, pod 정보
replicas 값을 4로 수정하여 똑같은 pod를 4개 Run 하도록 한다.

- kubectl scale deployment mynginx --replicas=4

로도 수정할 수 있다.

4개의 pod가 Running
node1에 돌아가던 pod를 삭제했더니 새로운 pod가 생성된다.

Kubernetes deployment로 pod을 만들 때의 장점

: pod가 죽으면 자동으로 새로운 pod를 생성

기존 데이터는 cluster 외부에 저장하게 설정하여 데이터 유실을 막아야 한다.

 

kubectl describe 명령어로 상세 정보 확인

kubectl describe deployments.apps (deployment 이름) : deployment 정보 확인

kubectl describe pod (pod 이름): pod 정보 확인

 

 

그런데, 외부에서 pod로는 직접 접속이 안된다.
따라서 서비스를 노출시켜야 한다.

 

Kubernetes의 서비스 유형

  1. ClusterIP (기본 형태)
  2. NodePort
  3. LoadBalancer
  4. ExternalName
더보기

1. ClusterIP

파드들이 클러스터 내부의 다른 리소스들과 통신할 수 있도록 해주는 가상의 클러스터 전용 IP

:  Cluster IP로는 Cluster 내부(master, node1, node2, node3)에서만 접속할 수 있다.

2. NodePort

: 외부에서 노드 IP의 특정 포트(<NodeIP>:<NodePort>)로 들어오는 요청을 감지하여, 해당 포트와 연결된 파드로 트래픽을 전달하는 유형의 서비스다.

: 이때 클러스터 내부로 들어온 트래픽을 특정 파드로 연결하기 위한 ClusterIP 역시 자동으로 생성된다.

3. LoadBalancer

클라우드 공급자의 로드 밸런서를 사용하여 서비스를 외부에 노출시킨다.

:  외부 로드 밸런서가 라우팅되는 NodePort ClusterIP 서비스가 자동으로 생성된다.

:  로드 밸런서의 (virtual) IP를 통해 접속한다.

그림 출처 Google Cloud

Nodeport 서비스 이용

: 각 node IP의 특정 포트 번호로 접속 (관리자가 test 할 때의 용도로 많이 쓰임)

 

-kubectl create service nodeport mynginx --tcp=80:80

## 서비스 이름 : mynginx
# 앞의 80: Cluster-IP접속할 사용되는 포트 번호
# 뒤의 80: ContainerPort 번호

 

- kubectl get service -o wide

10.105.138.230이 이 서비스의 대표 클러스터 IP
service 정보를 보니 Endpoints가 각 pod에 연결되어 있음을 알 수 있다.
node3 IP주소의 서비스 포트를 통해 외부에서 접속한다.

'Study > Cloud' 카테고리의 다른 글

Kubernetes - Namespace  (0) 2022.07.21
Kubernetes - yaml  (0) 2022.07.21
Kubernetes 소개 및 설치  (0) 2022.07.19
Docker Image Layer  (0) 2022.07.18
라우터 이해하기3  (0) 2022.07.06

Container의 강점(Docker 관점)

  • 도커 호스트의 커널(프로세스, 하드웨어 관리)을 공유하기 때문에 가볍고 빠르다
    (하드웨어가 차지하는 용량이 적다)
  • Application 운영 시 VM보다 가볍다
  • Application 배포가 빠르다
  • 지속적인 개발, 통합 및 배포가 가능하다
  • 개발, 테스트, 운영 전반에 걸쳐 일관성 있는 환경을 제공한다
  • Resource를 충분하게 활용할 수 있다

 

Container의 약점(Docker 관점)

  • 개발자 입장
    - Application code 작성 > Build > Ship > Run
    - 도커는 container 단위로 관리
    따라서 Container가 많으면 docker 명령어로 일일이 관리하기가 어렵다
  • 운영자 입장
    - Container가 갑자기 죽으면?
    - Container 운영 중 업그레이드는? Rollback은 어떻게?
    - 서비스의 이상 및 부하의 모니터링은 어떻게?

 

>>>> K8S - Container Orchestrarion<<<<

출처 https://ko.m.wikipedia.org/wiki/%ED%8C%8C%EC%9D%BC:Kubernetes_logo_without_workmark.svg

= Container 환경을 효과적으로 관리(생성, 수정, 삭제)하기 위한 도구

 

특징

  1. Clustering : 여러 node 중앙 관리
  2. 상태(State) 관리 : 설정한 Pod 개수 보장, Pod의 livenessProbe(컨테이너가 동작 중인지 여부를 나타낸다. 만약 활성 프로브에 실패한다면, kubelet은 컨테이너를 죽이고, 해당 컨테이너는 재시작 정책의 대상이 된다.)
  3. 부하 조정(Scheduling)으로 배포 관리 : Pod 배포 시 부하 정도가 가장 적절한 node 선정하여 배포
  4. 배포  버전 관리 : Rolling Update (Deployment로 새로운 버전의 App을 이전 버전을 유지한 채 업데이트 진행) + Roll Back (문제 발생 시 이전 버전으로)
  5. Service Discovery
    (Pod 집합에서 실행중인 Application을 네트워크 서비스로 노출하여 Cluster 외부에 있는 User가 Application을 이용하도록 네트워크 경로를 제공하는 것)
    (K8S는 Pod에게 고유한 IP주소 부여, Pod 집합에 대한 단일 DNS명을 부여. 이들간의 로드-밸런싱 수행)
  6. Volume Storage
    (각 node 별 다양한 storage 제공)
    (Volume : Pod에 종속되는 디스크. 해당 Pod에 속해 있는 여러 개의 Container가 공유해서 사용)

 

Kubernetes는 서비스 관리를 개별적이 아닌 집단적으로 관리한다

따라서 대부분의 상황에서 개별 시스템(node)와 상호작용할 필요는 없다

→ 비교적 Stateless(관계의 상태를 유지하지 않는 것) 업무에 적합하다 (stateless 예시 : UDP 프로토콜)

 

 

개발 배경

  • Container는 stateless, immutable, mortal (상태를 가지고 있지 않고, 변화하지 않으며, 언제든 죽을 수 있는)개념을 기반으로 아키텍처를 구성하다 보면 운영에 앞서 반드시 필요한 것이 Container Orchestration(=Kubernetes)이
  • Container Orchestration은 다수의 Container를 다수의 node(Cluster)에 적절하게 분산 실행하고, 원하는 상태(Desired State)로 실행상태를 유지해 주고, 다운타임 없이 유동적으로 스케일을 확장/축소(Scale)할 수 있게 도와준다
  • 사용자가 Container에 대한 동작과 다른 Container와의 관계를 정의하면 배포/운영/스케일링에 문제가 없도록 자동으로 관리되는 운영 시스템이라고 할 수 있다

 

Kubernetes 종류

  • 관리형 Kubernetes
    : Amazon EKS, Azure AKS, Google GKE
  • 설치형 Kubernetes
    : RANCHER, RedHat OPENSHIFT
  • 직접 구성형 Kubernetes
    : Kubeadm, Kubespray, Kops, Krib

 

Kubernetes 설치

설치 구성도

(아래 내용은 master, node1, node2, node3 모두에게 적용)

실행 환경 : centos7-x86_64



1. /etc/hosts 파일 수정

/etc/hosts

각 PC의 IP 작성 후 scp 로 node1,2,3에 복사
- scp /etc/hosts node1:/etc/hosts

 


2. SWAP 기능 끄기
- swapoff -a
- vi /etc/fstab 
(마지막 부분인 swap 부분 주석처리)
- reboot

 


3. br_netfilter Kernel Module 기능 켜기
- modprobe br_netfilter
- echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
- vi /etc/sysctl.conf
(net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1 작성)
- reboot

 


4. 방화벽과 selinux disable 처리
- systemctl disable firewalld
- vi /etc/sysconfig/selinux (## centos7 이전 버전 시)
(SELINUX=disabled 수정)

 


5. Kubernetes Repository 파일 다운로드

  • repository : kubelet, kubectl, kubeadm

(원래는 repo 파일을 직접 구성해야 한다. 편의상 있는 자료를 다운받겠다)
- cd /etc/yum.repos.d
- wget http://down.cloudshell.kr/k8s/kubernetes.repo

/etc/yum.repo.d/kubernetes.repo

- yum repolist -y (## kubernetes 설치 확인)

 


6. docker 설치 및 시작 
- curl -sSL http://get.docker.com | bash
- systemctl start docker && systemctl enable docker
- docker info | grep -i cgroup
(이 명령어 입력 시 Cgroup Driver : cgroupfs라고 나타난다.
Kubernetes는 docker의 cgroup을 systemd를 사용하기 때문에 
이를 systemd로 변경해주어야 한다)

 


7. docker cgroup driver를 systemd로 변경
- vi /usr/lib/systemd/system/docker.service
(ExecStart=/usr/bin/dockerd 바로 뒤에 --exec-opt native.cgroupdriver=systemd를 삽입)
- systemctl daemon-reload (## 모든unit filereload)
- systemctl restart docker 
- docker info | grep -i cgroup (## systemd로 변경됨)

 


8. 특정한 이전 버전(1.21.1)의 K8S 설치

※ kubernetes repository 
1. kubeadm - 쿠버네티스 클러스터 구성, 클러스터 가입, 삭제시 사용(init, reset, join..)
2. kubelet - 쿠버네티스 서비스(서버). 클러스터의 각 노드에서 실행되는 에이전트. Kubelet은 파드에서 컨테이너가 확실하게 동작하도록 관리한다.
3. kubectl - kubectl은 쿠버네티스 클러스터 관리자를 제어한다.
container 생성 순서

https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm/


- yum install -y kubelet-1.21.1-0 kubeadm-1.21.1-0 kubectl-1.21.1-0
- systemctl daemon-reload
- systemctl enable kubelet --now

 


9. K8S Clustering 구성(Master에서만 작업)
#특정한 이전 버전(1.21.1)의 K8S Clustering 구성
- kubeadm init --kubernetes-version=v1.21.1
이때, 설치 결과를 복사하여 다른 곳에 꼭 저장해놓는다.
----------------------------------------------------------------------------

설치 결과
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

(master에서 클러스터 구성 시 필요)

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 10.0.2.15:6443 --token h1a03j.qe1qctd831cfijxa \
        --discovery-token-ca-cert-hash sha256:538ab8cea29bab9814f850a87450008bf8ee7efcf3706e562bbc6ce5bb08cf74

(나중에 node1,2,3에서 join 할 때 필요)
----------------------------------------------------------------------------
그리고 

  mkdir -p $HOME/.kube
  cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  chown $(id -u):$(id -g) $HOME/.kube/config

이 부분을 순차적으로 입력해준다.

 

10. Kubernetes 버전 정보 확인 - Master에서
- kubectl version --short
- kubeadm version -o yaml
- kubelet --version 

레파지토리 버전 정보


Namespace 확인
- kubectl get namespaces

- kubectl get namespace

- kubectl get ns 

 


11. Cluster 구성정보(ConfigMap) 확인하기 - Master에서
- kubectl get configmap -n kube-system
- kubectl get cm kubeadm-config -n kube-system
- kubectl get cm kubeadm-config -n kube-system -o yaml
- kubeadm config view

 


12. Clustering 상태 및 Pod 상태 확인하기 - Master에서
- kubectl get node (## master가 NotReady 상태)
- kubectl get pod --all-namespaces (## 모든 pod 확인)
- kubectl get pod -A (## 모든 pod 확인)


-->> cluster 상태가 Not Ready이고 coredns 상태가 Pending이다.

이 상태에선 각 Node들에서 실행중인 Pod들간에 통신이 안된다
-->>Pod Network를 생성하여 이 문제를 해결할 수 있다

 


13. Pod Network 구성하기 - Master에서만 작업 (weave-net 설치)
- export kubever=$(kubectl version | base64 | tr -d '\n')
- kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"

- kubectl get pod -A (## coredns가 이제는 running)
30초 정도 기다린 후 
- kubectl get pods -A

weave - net - xxxxx 이라는 Pod 이 master 에 설치됨

- kubectl get nodes (## master가 Ready 상태가 됨)

 


(node1,2,3에서)
kubeadm join 10.0.2.15:6443 --token h1a03j.qe1qctd831cfijxa \
        --discovery-token-ca-cert-hash sha256:538ab8cea29bab9814f850a87450008bf8ee7efcf3706e562bbc6ce5bb08cf74
입력 후

(master)
- kubectl get nodes (## master 말고 node1,2,3도 Ready 상태가 됐음을 알 수 있다)

 

'Study > Cloud' 카테고리의 다른 글

Kubernetes - yaml  (0) 2022.07.21
Kubernetes - Deployment & Service  (0) 2022.07.20
Docker Image Layer  (0) 2022.07.18
라우터 이해하기3  (0) 2022.07.06
라우터 이해하기2  (0) 2022.07.05

docker image는 Layer로 구성 (Meta + Data)

메타 정보 확인
- docker inspect (이미지이름)

 

Docker Layer = image layer(read-only) + container layer(read/write)

 

container layer = 컨테이너가 작업하는 데이터 저장. 따라서 컨테이너 종료 시 conatiner layer 삭제됨

컨테이너실행되면 Image Layer참조하여 Container Layer생성
결과적으로 2종류의 Layer생성되고, Layer합친 것이 바로 컨테이너File System
그래서 ContainerFile SystemUnion File System이라고 한다
 

Docker Image Layer

: Docker Image LayerDockerfile 명령어 갯수와 동일

 

Dockerfile 내용
Image Layer가 두개 있고, 이를 합쳐 최종적으로 Image 생성(9e74~)
생성된 이미지 확인((9e74~)
docker image history img:v1
docker inspect img:v1

image layer보여주는 docker inspectdocker history보여지는 image layer 갯수가 다를 있다

(docker inspect에서는 image layer 크기가 0인 것은 보여주지 않음)

 

※ 먼저 생성된 Layer다음에 생성된 Layer부모(Parent)된다

 

 

Build Cache

docker build를 실행할 때 사용되는 개념.

Build 중에 동일한 Image Layer가 있으면 기존 것을 재사용한다는 개념

 

 

img:v2 빌드
Dockerfile 내용 수정 없이 다시 build. Cache 사용함을 알 수 있다.
Dockerfile 수정
img:v3 빌드. Cache를 사용함과 새롭게 Image가 생성됨을 알 수 있다.

여기서, 수정이 없는 Layer2 까지는 Cache를 사용하지만, 새롭게 입력된 명령어( echo SLEEPING ,,,)에 대해서는 새롭게 작업함을 알 수 있다.

img: v1, v2는 같은 Image ID를 가지지만, v3는 다르다.

 

따라서, Image Layer 수정이 빈번한 dockerfile명령어는 최대한 마지막에 쓰는 것이 중요
만약 제일 위에 빈번한 수정이 있는 Image Layer있다면, 수정할 때마다 대부분의 Image Layer새롭게 생성하기 때문에, 그만큼 Build 속도가느리고 Image Layer 저장공간을 많이 차지하게 된다

 

Docker Build 과정
docker images -a 명령어를 통해 중간 과정의 이미지 확인

 dangling 이미지 = 이름과 태그가 없는 image

 

dangling 이미지 종류 

1. docker build 과정에서 중간에 생성되어 삭제된 docker image layer = "dangling build cache"

2. 기존 도커 이미지와 동일한 이름과 태그를 사용하여 docker build했을 때 = "dangling image"

 

dangling 이미지는 불필요하게 디스크 공간을 차지할 수 있으므로 관리자가 수동으로 삭제해야 한다!


dangling build cache 삭제 명령어

- docker system prune -a (##모든 이미지 다 삭제됨. 조심조심)

 

dangling image 몽땅 삭제 명령어

- docker images -f "dangling=true"

- docker rmi $(docker images -f "dangling=true" -q) 또는 docker image prune

 

'Study > Cloud' 카테고리의 다른 글

Kubernetes - Deployment & Service  (0) 2022.07.20
Kubernetes 소개 및 설치  (0) 2022.07.19
라우터 이해하기3  (0) 2022.07.06
라우터 이해하기2  (0) 2022.07.05
라우터 이해하기  (0) 2022.07.04
케이블이 많아지는 것을 단순하게 하는 장비. 여러 대의 케이블을 연결하는 작업
"스위치"
- MAC address table 자동 생성
- Transparent Bridging(Learning, Flooding, Forwarding, Filtering, Aging)
1. Learning, Flooding :  주소를 파악, 없으면 Flooding
2. Forwarding, Filtering
3. Aging : 시간이 지나면 알아서 사라짐

스위치끼리 연결하면 ? 네트워크가 확장이 됨
네트워크를 구성하기 위해 기본적으로 필요함

한 네트워크에 최대 500대 권장

스위치도 너무 많으면 충돌이 발생
라우터가 이를 조정. 라우터는 기본적으로 브로드캐스트 차단.
스위치는 기본적으로 브로드캐스팅

  • 라우터 쓰는 목적, 이유
1. Routing & Switching : 길 찾기
2. 거리가 멀어서
3. 네트워크 간 충돌을 줄이기 위해 스위치 중간에 위치하여 대역(네트워크)을 나눠 원활하게 통신. (브로드캐스팅 차단)
4. 보안(패킷 필터링으로 차단)
 
단점 : 속도 저하(잘 못 느낌) -> 해결 : 라우터 대신 L3 스위치 사용(LAN 라우터. 속도 안떨어짐)

종단 라우터는 default gateway 무조건 필요. 중간에 있는 애들은 설정 안 해도 됨.

- tracert(traceroute) : 라우터 경로 추적하는 명령어, 고장난 라우터 찾을 수 있음


공인 IP  
  • 공인 IP는 전세계에서 유일한 IP 주소
사설 IP 
  • 하나의 네트워크 안에서 유일
사설 IP 주소만으로는 인터넷에 직접 연결할 수 없다. 라우터를 통해 1개의 공인(Public) IP만 할당하고, 라우터에 연결된 개인 PC는 사설(Private) IP를 각각 할당 받아 인터넷에 접속할 수 있게 된다.
--> 이 정보를 NAT Table에 저장

------------------------------------
<용어 정리>

L2 : 스위치 - VLAN..
VLAN(Virtual LAN)
- 하나의 Switch에 연결된 장비들의 Network(Broadcast Domain)를 나눔
- 사용 시, 보안성 강화(라우터로 통신해야 하기 때문에)

L3 : 라우터 포함 스위치 - VPN..
 
1. 포트 포워딩

- 공유기(라우터)에서 진행
- 특정 포트(모든 포트)를 통해 목적지를 지정해 줌

 

포트 포워딩

 

외부(10.0.2.202)에서 각각에 접속

 

2. Reverse Proxy

- 웹 서버 앞에 위치하여
- 웹 서버(80,443)에 대해서만 포워딩
- "L7 스위치"
- 리버스 프록시 서버를 여러개의 서버 앞에 두면 특정 서버가 과부화 되지 않게 로드밸런싱이 가능

ex) nginx(리버스 프록시 서버), AGW (Application GateWay(Azure Cloud 용어))

 
3. (Forward) Proxy

- 클라이언트 앞에 위치하여 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램
- 일반 프록시 서버

 

 
4. 로드 밸런서

- 여러 대의 서버를 두고 서비스를 제공하는 분산 처리 시스템에서 필요한 기술
-  똑같은 storage. 다른 contents. DNS 서버의 단점을 해결한 장비
- 보안을 위해서 사용
- "L4 스위치"
*포트포워딩 접속 시 비밀번호가 필요 없음
* VPN 접속 시 사용자 비밀번호 필요
-----------------------------------

한 주소에 여러 접속 요청이 있을 시(부하 상황 발생), 어떻게 할까?
"스케일 아웃" : 장비를 추가해서 확장하는 방식(주소(url)는 같고 IP는 다르게. 무한 분산 방식)

1)  DNS Server : 라운드 로빈 방식(첫 번째 요청은 첫 번째 서버, 두 번째 요청은 두 번째 서버, 세 번째 요청은 세 번째 서버에 할당)
문제점 : 부하가 걸리는지 체크할 수 없음
2) Load Balancer : DNS Server의 문제점 해결. 지능적으로 여러 서버가 분산 처리 하는 것

 

'Study > Cloud' 카테고리의 다른 글

Kubernetes 소개 및 설치  (0) 2022.07.19
Docker Image Layer  (0) 2022.07.18
라우터 이해하기2  (0) 2022.07.05
라우터 이해하기  (0) 2022.07.04
vi, yum, file system, permission 이해  (0) 2022.07.04
  • 라우터
- 3계층(네트워크 계층) 장비
- 서로 다른 Network 연결
- 특정 인터페이스를 통하여 수신한 packet의 목적지 IP주소를 보고 목적지와 연결된 인터페이스를 통해 packet 전송(라우팅)
- 역할 : 경로결정, 스위칭
- 라우팅 프로토콜에 따라 라우팅 테이블 작성
(show ip route - 라우팅 테이블 확인)
- ping 날렸을 때. 라우팅 테이블에 없으면 기본 게이트웨이(default gateway, 0.0.0.0)으로 보낸다. 

  • Switch와 Router의 차이점
스위치 : MAC Address Table O. 목적지를 모르는 frame을 flooding(브로드캐스팅)
라우터 : Routing Table O. 목적지를 모르는 packet은 폐기

  • 라우터 Interface 종류
1) LAN 구간 → Ethernet(Fast Ethernet) Interface
2) WAN 구간 → Serial Interface
3) 관리용 Interface → Console Port, ..

  • 라우터 접속 방법
1) 라우터의 consol 포트에 console cable 연결, 나머지 한쪽은 컴퓨터의 serial 포트(COM1 포트)에 연결 → 직접 연결, 케이블 필요하다는 단점
2) Telnet, SSH

- 종류
1) Static 라우팅 프로토콜
2) Dynamic 라우팅 프로토콜(RIP, OSPF 등)

  • NAT (Network Address Translation, 네트워크 주소 변환) 
: 내부 네트워크에서는 사설 IP를 사용하고, 외부 네트워크(Internet)으로 나가는 경우 공인 IP 주소로 변환돼서 나가게 하는 기술
1) 공인 IP주소 부족 해결
2) 보안(내부 사설 IP주소를 숨길 수 있음)

+) 사설 IP 주소
- Class A : 10.0.0.0 ~ 10.255.255.255 
- Class B : 172.16.0.0 ~ 172.31.255.255 
- Class C : 192.168.0.0 ~ 192.168.255.255 

- NAT 장비 안에 VPN 기능을 넣으면 NAT 라우터끼리 통신할 수 있음

---라우터에 NAT 기능 추가 = 공유기---

공유기의 NAT 기능(내부 → 외부)
외부 → 내부 로 설정하기 위해선?

1) Port Forwarding
:
외부 포트를 개방하여 통로를 만드는 것
보통, 외부 포트와 내부 PC 포트 번호를 동일하게 설정
단점 :  1개의 장치/컴퓨터에 1개의 포트만 매핑 가능(1:1)

2) DMZ
: 외부에서 접근하는 어떤 포트라도 1개의 특정 사설IP/ 내부IP로 매핑
--> 보안에 매우 취약

 


------라우터에 VPN 기능 추가------

 

포트 포워딩 시 포트스캐닝을 통한 해킹이 가능하기 때문에 VPN을 설정하면 효과적임

1) 직접 연결 
2) 이동형 VPN 장치
3) VPN 클라이언트 설치

1) 인증
2) 정책(누가, 언제 접속 가능한지 등)


  • DHCP 
- 부팅 시 자동으로 IP address 할당(동적 IP 할당)
- 라우터가 이 기능을 가지고 있으면 사용자가 편리함
(스마트폰에서 Wi-fi 연결 시 IP 설정하지 않아도 DHCP 기능을 가진 공유기가 자동으로 IP 할당해줘서 사용가능한 것임!)

'Study > Cloud' 카테고리의 다른 글

Docker Image Layer  (0) 2022.07.18
라우터 이해하기3  (0) 2022.07.06
라우터 이해하기  (0) 2022.07.04
vi, yum, file system, permission 이해  (0) 2022.07.04
FTP서버 운영  (0) 2022.07.04

 

  • 라우터
- 라우터는 서로 다른 네트워크를 연결하기 위해 사용한다.
- 라우터 = 라우팅 & 스위칭
(라우팅 테이블을 만들어 주소를 '기억'해두고, 이를 참고하여 라우팅 처리를 한다. 길을 찾아준다.)
- 라우터는 LAN카드(NIC)가 최소 2개 → 물리적 연결 후 → 라우터 SW 설치(라우팅 테이블을 만들기 위해)
- 라우터에 NAT 기능 추가 = "공유기"

※ 참고<사설 ip>
10.#.#.# 
172.16.1.# ~ 172.16.31.#
192.168.#.#
-----------------------------------
<Router 1,2 네트워크 설정>
  • 이더넷1(NAT네트워크)
    : ToInternet(외부 인터넷 설정) 
    - 10.0.2.201, 10.0.2.202
  • 이더넷2(어댑터에 브리지)
    : LAN(PC(centos)로의 연결) 
    - 192.168.201.1, 192.168.202.1
  • 이더넷3(내부 네트워크)
    : InterRouter(라우터끼리의 연결) 
    - 172.16.0.1, 172.16.0.2

이더넷3끼리는 통신O
이더넷2끼리 통신하려면 라우터 SW 설치해야 함 

어댑터에 브리지 ip는 충돌하면 안됨

네트워크가 다르면(centos1(192.168.201.0)와 centos2(192.168.202.0)) 서로 통신할 때 라우터를 이용해야 함. 넘겨주는 기능을 하는 것이 라우터 sw 

  • 내부 네트워크 
- 그 컴퓨터에 있는 가상머신끼리만 통신할 수 있음. 물리적으로 다른 컴퓨터끼리는 통신할 수 없음
 
  • NAT = 기본적으로 일방향(내부 > 외부)
- 외부 > 내부로 가고 싶을 경우. 포트 포워딩 설정 해놔야 함
1. 부족한 공인 ip 확보 문제 해결하기 위해 제작됨.
2. 보안 구현(고유한 ip가 아니기 때문에. 공인ip이기 때문에. 함부로 들어올 수 없음)

-----------------------------------
라우팅 프로토콜 RIP
 = 라우터끼리의 정보교환 하여 네트워크 연결
Router1 이 가지고 있는 네트워크 정보를 Router2도 알아야  centos1,2가 서로 통신이 가능

'Study > Cloud' 카테고리의 다른 글

라우터 이해하기3  (0) 2022.07.06
라우터 이해하기2  (0) 2022.07.05
vi, yum, file system, permission 이해  (0) 2022.07.04
FTP서버 운영  (0) 2022.07.04
NFS, Samba 운영-2  (0) 2022.07.04

https://padlet.com/yerim999/tgf0wzcq63foh5vc/wish/2232934744

 

Day7

----------DNS----------<윈도우에서 ip 수동으로 설정>설정 - 네트워크 및 인터넷 - 이더넷 - 어댑터 옵션 변경- Ethernet(LAN) - 속성 - tcp/ip 속성에서 변경<컴퓨터가 ip주소를 알아내는 순서> - Name Resolution Se

padlet.com


---------Linux Editor----------
  • 모드형 편집기 : vi
1. 명령어 모드 : 복사, 삭제, 붙여넣기
2. 입력 모드 : i,o
3. 실행 모드 : esc, :
입력 모드에서 esc 입력 시 실행 모드
명령 모드에서 : 입력 시 실행 모드

i - 현재 커서 입력
o - 아랫줄 입력
O - 윗줄 입력
yy - 복사
3yy - 3줄 복사
p - 붙여넣기
dd - 한 줄 삭제
x -한 글자 삭제
D - 현재 커서부터 마지막 커서까지 삭제
:w - 저장하기
:w "파일이름" - saveas 다른이름으로 저장
:q - 수정 적용 후 빠져나오기
:q! - 수정 적용하지 않고 빠져나오기
:wq - 저장하고 나오기
$ - 가장 마지막 커서로 이동
:$ - 가장 마지막 라인으로 이동
:숫자 - 해당 라인으로 이동
u - 이전 작업 취소
:e! - 저장 이후 작업 전부 취소
수정? 마지막 커서로 간다($) -> /이나 ? 입력 -> n으로 찾기
:r "파일" - 읽어오기(불러오기)
 
  • 비모드형 편집기 : gedit

---------yum----------

yum?? Yellowdog Updator Modified
- yum list installed : 설치된 "패키지" 확인
+) systemctl list-unit-files : 설치된 "서비스" 확인


- yum list update : 업데이트 가능한 패키지 확인
- yum update : 몽땅 업데이트!

- yum info "패키지명" : 패키지 정보 확인
- yum search "이름대충" : 비슷한 이름의 패키지 찾기
- yum provides "파일" : 파일이 어느 패키지에 속하는지 찾기


원하는 패키지가 없을 때?
--> Internet에서 repository 다운 받아서 설치


Archive
: 여러 파일을 묶고 + 압축까지 가능
: 이메일 서버에서 사용
- tar (tape archive) : 압축 (지금의 zip파일)

- du -sh /lab/ :디렉토리 용량 확인

 


archive 하기
- tar cvf /mnt/lab.tar /lab/ : /lab/을 archive하여 /mnt/에 lab.tar라는 이름으로 저장(c : create, v : 화면에 상세히 출력, f : archive파일 사용)
- scp lab.tar centos2:/root/ :centos2의 /root/로 파일 전송
- tar xvf lab.tar : archive풀기
 
archive 하면서 압축하기
- tar cvzf labzip.tar.gz /lab/
- scp labzip.tar.gz centos2:/root/
- tar xvzf labzip.tar.gz

--------File System--------

Windows : FAT, FAT32, NTFS, ReFS
Linux : ext3, ext4, xfs, zfx ...
Vmware (회사) => vmfs 

 

- fdisk -l | grep /dev : 연결 확인
- fdisk /dev/sdb : 하드디스크 연결
- mkfs -t ext4 /dev/sdb1  : 포맷
(n : 파티션 생성 > 숫자 입력(몇개로 파티션 할 건지), w: write & exit)
- mount -t ext4 /dev/sdb1 /mnt : 하드디스크에 연결하여 사용
- vi /etc/fstab : reboot 해도 mount 유지
- umount /mnt : 마운트 해제
 

 

** 마운트 :  하드웨어 장치를 액세스 하기 위해서는 특정한 위치에 연결해 주는 작업
방법 : mount  -t  <파일 시스템 타입>  <장치 파일>  <마운트 포인트>

** /etc/fstab 파일 옵션 보충 설명
/dev/hda1     /                             ext3          defaults       1       1
디바이스명   마운트디렉토리   파일시스템   옵션        덤프    fsck

(덤프 : 1의 값은 리눅스 파일 시스템일 때 사용하고 그 외의 경우 0을 사용한다.
fsck : 파일 점검 명령어로 부팅 시 점검하면 1, 하지 않으면 0을 사용한다.)

 

---------Permission---------

사용자는 [기본 그룹]과 [보충 그룹]에 속할 수 있다.
그룹 = 여러 사용자를 하나로 묶은 것
그룹에 권한을 주면 여러 사용자에 적용이 됨
- groups suser : 속한 그룹 확인
- id suser : 1,2차 그룹 자세히 (1차 그룹 : 파일 소유 그룹. 2차 그룹 : 파일 접속 그룹
 
- useradd "유저" : 자신의 group에 속함
- useradd -N "유저" : N 옵션 사용 시 기본 group에 속함

- groupadd "그룹"
- gpasswd "그룹"

- usermod : 사용자 수정. 그룹 변경
- usermod -g salesgroup suser1 : 1차 그룹 변경
- usermod -aG salesgroup suser1 (add, G:2차 그룹)

여러 그룹을 하나로 합칠 때 : 방법 없음..! 사용자 다 넣어야 함
- groupadd pubgroup
- gpasswd pubgroup
- usermod -aG pubgroup suser1

- chmod 640 /public/public.txt
소유자(root)만 rw가능, 나머지 그룹은 아무 권한 없음

- chgrp -R pubgroup /public : 소유 그룹 변경(R : 하위까지)

 



+) 관리자 권한을 가진 유저
- sudo -i : root 비밀번호 없이 root로 변경

'Study > Cloud' 카테고리의 다른 글

라우터 이해하기2  (0) 2022.07.05
라우터 이해하기  (0) 2022.07.04
FTP서버 운영  (0) 2022.07.04
NFS, Samba 운영-2  (0) 2022.07.04
NFS, Samba 운영-1  (0) 2022.07.04

https://padlet.com/yerim999/tgf0wzcq63foh5vc/wish/2232278223

 

Day6-3

FTP : 포트 20,21번 사용. 인터넷 상의 파일을 다운로드, 업로드 하는 서비스(centos3 - ftp 서버)- yum install vsftpd -y (설치)- systemctl enable vsftpd --now(구동)- cd /var/ftp- cd pub (ftp서버 기본 디렉토리)- touch secre

padlet.com

FTP : 포트 20,21번 사용. 인터넷 상의 파일을 다운로드, 업로드 하는 서비스

(centos3 - ftp 서버)
- yum install vsftpd -y (설치)
- systemctl enable vsftpd --now(구동)
- cd /var/ftp
- cd pub (ftp서버 기본 디렉토리)
- touch secret.file

(Windows - 클라이언트)
1. 서버 관리자 - 로컬 서버 - IE 보안 강화 구성(다 disable로 변경)
2. 인터넷 -  MobaXterm 다운
3. session - ftp - centos3 ip주소 입력, anonymous 입력 - 들어가면 pub 디렉토리 보임

(centos1 - 클라이언트)
- yum install ftp -y
- ftp 10.0.2.7
anonymous
ENTER
- put "파일" : 업로드
- get "파일" : 다운로드


ftp 서버 = 여러 파일 동시 다운로드 가능 
다운로드 속도도 빠름 
인터넷에서 주고받을 때는 이를 이용하는 것이 좋음

'Study > Cloud' 카테고리의 다른 글

라우터 이해하기  (0) 2022.07.04
vi, yum, file system, permission 이해  (0) 2022.07.04
NFS, Samba 운영-2  (0) 2022.07.04
NFS, Samba 운영-1  (0) 2022.07.04
Linux 기본  (0) 2022.07.04

+ Recent posts