반응형

 

 

Offloading 설정

  • offloading을 off시 모든 패킷을 CPU에서 처리 하기 때문에 트래픽이 많은 환경에서는 되도록 off 하지 않도록 권장.
  • schedule - 멀티 코어 상태에서 out-of-order를 줄일 수 있도록 세션 기반으로 처리 (기본설정 off)
  • reorder - IPS 엔진 통과후 re-orderd 발생을 줄이는 기능 (기본설정 off 권장)

 

(config)# ip offloading reroder
(config)# ip offloading schedule

(config)# ip offloading schedule all static
(config)# ip offloading reorder all

(config)# no ip offloading

Offloading 동작 상태 확인
# sh ip offloading

Offloading 동작 상태 상세 정보
# sh ip offloading statistics

 

반응형

'VPN > NEXG' 카테고리의 다른 글

[NEXG] Interface Track, NAT 설정  (0) 2023.10.08
[NEXG] 방화벽 보안(Firewall) 설정  (0) 2023.02.26
[NEXG] 정책 라우팅(Policy Based Routing) 설정  (0) 2023.02.26
[NEXG] 기본 설정(Config)  (0) 2023.02.26
반응형

 

기본 설정

hostname 설정
(config)# hostname NEXG_VPN

사용자 계정 설정
(config)# username jinsu secret jinsu1234

 

 

interface IP 설정

  • eth0 은 brige interface로 lan 포트에 대한 switch 포트다.
(config)# interface lo
(config-if)# ip address 192.168.0.1/32
(config-if)# no shutdown
!
(config)# interface eth1
(config-if)# description EXT_Port
(config-if)# ip address 192.168.1.1/30
(config-if)# ip address 192.168.2.1/30 secondary
(config-if)# no shutdown

 

 

line vty 설정

  • login local - 로컬 계정으로 로그인 허용
  • exec-timeout 5 0 - 장비에 접속시 5분동안 반응이 없으면 접속 종료
  • local secret digest sha512 - 장비 접속 인증방식 설정
기본 접속 설정 시
(config)# line vty
(config-line)# login local
(config-line)# exec-timeout 5 0
(config-line)# local secret digest sha512

tacacs+ 사용시
(config-line)# local tacacs+ local

 

 

웹서버 설정

  • HTTP
(config)# ip http port 17877
(config)# ip http server
  • HTTPS
(config)# ip http secure-port 17877
(config)# ip http secure-server

 

 

SSH 연결 설정

  • 장비 시간 설정 변경시 rsa key 재 생성 필요 ( rsa key 지우는 명령 X)
SSH 키 생성
# generate crypto key rsa label jinsu
jinsu 이름으로 crypto key 생성
# show crypto key mypubkey rsa

SSH 설정
(config)# ip ssh rsa keypair-name jinsu
(config)# ip ssh port 2222
(config)# ip ssh server

SSH 서버 상태 확인
# show ip ssh server status

 

 

Logging 설정

1. local 로그 저장

  • logging local all - 로컬에 모든 로그 저장
  • logging local path disk1:/log alert 30 purge 20 stat - 저장공간 30퍼 남으면 알람 20퍼 남으면 삭제
(config)# logging local all
(config)# logging local path disk1:/log alert 30 purge 20 stat

2. remote 로그 저장

(config)# logging remote 192.168.100.1 ips l7filter session appgw-http appgw-mail appgw-im appgw-ftp ipsec system audit vpdn user-identity
(config)# logging source 192.168.0.1

 

 

VOS 업그레이드 및 변경

# copy ftp://admin@192.168.100.1/vos-4.6-octeon-150126.bin disk0:/ /f
# boot system vos-4.6-octeon-150126.bin
# reload

 

 

수동 백업, 복원, 삭제

  • 수동 백업, 복원, 삭제
백업
# copy disk0:/startup-config disk0:/startup-config.bak
# show disk0:/startup-config.bak
복원
# copy disk0:/startup-config.bak disk0:/start-config
# copy disk0:/startup-config.bak disk0:/startup-config /f
삭제
# delete disk0:/startup-config.bak

 

 

공장 설정 초기화

# configure reset
[yes/no] yes
# reload
[yes/no] yes

 

 

인터페이스 상태 감시

  • 회선 연결 장비가 Hang 상태로 통신이 불가능 할 때 회선 링크를 강제로 끊는 기능

1. 고정 IP를 사용하는 경우

  • icmp 사용하면 상대 장비에 트래픽을 발생하여 차단하므로 주의해서 사용
  • icmp 패킷을 5초 간격으로 3번 응답 실패시 회선 Down
(config)# interface eth1
(config-if)# ip address 10.10.10.1/24 link-timeout 5 3 icmp 10.10.10.254

2. DHCP 를 사용하는 경우

  • arp 패킷을 5초 간격으로 3번 응답 실패시 회선 Down
(config)# interface eth2
(config-if)# ip address dhcp link-timeout 5 3 arp

인터페이스 상태 확인
# show ip interface brief

링크 상태 확인
# show link

 

필수 - 회선이 2개 이상일 경우 PBR 설정 필수

(config)# ip route policy 10 table 10 source eth1 10.10.10.254 eth1
(config)# ip route policy 20 table 20 source eth2 eth2 dhcp

Policy 확인
# show ip route policy
권장
1. link-timeout 5 3 arp ( VDSL, Metro 고속회선에 사용)
2. link-timeout 8 3 icmp ( ADSL 저속 회선 또는 손실이 많은 회선에 사용)

 

 

Static 라우팅

(config)# ip route 0.0.0.0/0 10.10.10.254

라우팅 확인
# show ip route

 

 

ECMP 라우팅

  • 라우팅 뒤에 AD값을 추가하여 Equal Cost 설정
(config)# ip route 0.0.0.0/0 eth1 dhcp
(config)# ip route 0.0.0.0/0 eth2 dhcp 100

 

 

NTP 설정

  • ntp ignore-offset - 기본 시간 (1000sec) 이상 시간차가 날 경우에도 동기화 설정
자동 설정
(config)# ntp source eth0
(config)# ntp server 203.248.240.140
(config)# ntp server 210.98.16.100
(config)# ntp ignore-offset
(config)# clock timezone KST 9

수동 설정 ( 1회 )
# clock ntpdate 203.248.240.140 

NTP 상태 확인
# show ntp status
# show ntp associations

 

 

VLAN 설정

VLAN 생성
(config)# vlan database
(config-vlan)# vlan 10 state enable
(config-vlan)# vlan 20 state enable

인터페이스에 VLAN 선언
(config)# interface eth0
(config-if)# switchport
(config-if)# switchport mode trunk
(config-if)# switchport allowd vlan all
(config-if)# no shutdown

(config)# interface lan1
(config-if)# switchport
(config-if)# switchport access vlan 10
(config-if)# no shutdown

(config)# interface lan2
(config-if)# switchport
(config-if)# switchport access vlan 20
(config-if)# no shutdown

VLAN 가상 인터페이스 설정
(config)# interface vlan0.10
(config-if)# ip addess 10.10.10.1
(config-if)# no shutdown

VLAN 확인
# show vlan brief

 

 

DHCP server 설정

내부 사용자 인터페이스
(config)# interface eth1
(config-if)# ip address 192.168.1.1/24
(config-if)# no shutdown

DHCP Pool 설정
(config)# ip dhcp pool jinsu
(dhcp-config)# network 192.168.1.0 255.255.255.0
(dhcp-config)# range 192.168.1.100 192.168.1.200
(dhcp-config)# dns-server 168.126.63.1
(dhcp-config)# dns-server 168.126.63.2
(dhcp-config)# default-router 192.168.1.1

DHCP 사용할 내부 인터페이스
(config)# ip dhcp server eth1

dhcp 확인
# show ip dhcp pool

 

 

VRRP 설정

  • virtual-ip 192.168.1.1 backup - 가상 GW 설정
  • circuit-failover eth2 100 - eth2 인터페이스가 Down되면 priority 100 감소
  • arp-send fail-over 3 - 링크가 살거나 장비가 살아올라올때 fail-over 시 GARP 주기 3회
(config)# router vrrp 10 eth1
(config-router)# virtual-ip 192.168.1.1 backup
(config-router)# priority 200
(config-router)# circuit-failover eth2 100
(config-router)# arp-send fail-over 3
(config-router)# enable

VRRP 확인
# show vrrp brief

 

 

System 성능 확인

CPU 기본 상태 보기 / 상세 상태 보기, 프로세스 Uptime 상태 확인
# sh process cpu detail

Memory 기본 상태 보기 / 상세 상태 보기, 프로세스 Uptime 상태 확인
# sh process memory detail

 

 

반응형
반응형

 

 

 

 

 

 

 

NameSpace

네임스페이스 역활

  • Kubernetes 클러스터 안에서 논리적으로 분리된 공간입니다.

기본적으로 Kubernetes 클러스터를 구축하면 생성되는 NameSpace

  • 공간 (1) Default : 평소에 기본적으로 배포 및 서비스한 분리된 공간입니다.
  • 공간 (2) kube-system : Kubernetes 클러스터를 처음 구성하면 클러스터에 필요한 Pod가 자동 생성되는 공간입니다.
  • 공간 (3) kube-public : 모든 사용자(인증되지 않은 사용자 포함)가 읽기 권한으로 접근할 수 있으며 공개적으로 읽을 수 있는 이 네임스페이스의 공개적인 성격은 기본 특징이며 요구 사항은 아닙니다.
  • 공간 (4) kube-node-lease:  kubelet이 하트비트를 보내서 컨트롤 플레인이 노드의 장애를 탐지할 수 있게 한다.

 

 

 

 

 

 

 

NameSpace 기본 환경변수 변경

# 설정하기
kubectl config set-context --current --namespace=<insert-namespace-name-here>

# 확인하기
kubectl config view --minify | grep namespace:

# ex)
kubectl config set-context $(kubectl config current-context) --namespace=dev

 

모든 네임스페이스안에 있는 Pod 확인

kubectl get pods --all-namespace

kubectl get pods -A

 

 

 

 

 

 

 

반응형
반응형

 

 

 

Docker에서 기본 인증 사용하기

도커 레지스트리에는 로그인 기능이 없기 때문에 Nginx의 기본인증 기능을 사용해야하며, HTTP 프로토콜에는 인증을 지원하지 않습니다. 따라서 HTTPS 프로토콜을 사용해야합니다.

 

 

 

/etc/hosts 파일 수정

# vi /etc/hosts
127.0.0.1 localhost
127.0.1.1 master
192.168.0.201 registry.example.com


# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

 

 

 

 

사설 SSL 인증서 생성 및 설정

# openssl genrsa -out server.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
.......................................+++++
..................................+++++
e is 65537 (0x010001)

 

 

사설 SSL 인증서 키 파일 설정

# openssl req -new -key server.key -out server.csr
Can't load /root/.rnd into RNG
139832043372992:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/root/.rnd
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:KO
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:Seoul
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Company
Organizational Unit Name (eg, section) []:Company
Common Name (e.g. server FQDN or YOUR name) []:registry.example.com
Email Address []:jinsu@example.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
  • Country Name : 국가 코드이며, 대문자 KO를 입력합니다.
  • State or Province Name : 주 또는 도입니다. 상황에 맞게 입력
  • Locality Name : 도시입니다. 상황에 맞게 입력
  • Organization Name : 회사이름 입력
  • Organizational Unit Name : 회사 조직 이름 입력
  • Common Name : Docker 레지스트리를 실행하는 서버의 도메인 주소 /etc/hosts 파일에 설정한대로 입력
  • Email Address : 이메일 주소 입력

 

 

 

서버 인증서 파일을 생성하고 시스템에 설치

# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt   
Signature ok
subject=C = KO, ST = Some-State, L = Seoul, O = Company, OU = Company, CN = registry.example.com, emailAddress = jinsu@example.com
Getting Private key

# ls
total 68
-rw-r--r--  1 root root 1350 Oct 30 07:23 server.crt
-rw-r--r--  1 root root 1070 Oct 30 07:23 server.csr
-rw-------  1 root root 1675 Oct 30 07:05 server.key

# cp server.crt /usr/share/ca-certificates/
# echo "server.crt" | tee -a /etc/ca-certificates.conf
server.crt
# update-ca-certificates 
Updating certificates in /etc/ssl/certs...
rehash: warning: skipping ca-certificates.crt,it does not contain exactly one certificate or CRL
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.

# service docker restart

 

 

 

 

이어서...

반응형
반응형

 

Docker 컨테이너 레지스트리를 S3와 연결하여 이미지를 올리는 방법

 

 

 

 

AWS S3 버킷 생성

 

 

 

위에 본인 계정을 눌러서 보안 자격증명 선택

 

 

 

액세스 키를 생성하고 액세스 키 ID, 보안 액세스 키 정보를 저장하세요

 

 

 

 

 

이미지 공유하는 서버

# docker pull registry:latest

# docker run -d -p 5000:5000 --name S3-registry \
> -e SETTINGS_FAVOR=s3 \
> -e AWS_BUCKET=myjinsubucket \
> -e STORAGE_PATH=/registry \
> -e AWS_KEY=AKIAXTQDBB4IWDCCQ7G71 \
> -e AWS_SECRET=jB+PT5NNL38XRR7mw+I1KnGm0+sr+GEl99waCxJy1 \
> registry
ef05e0f6c4f5dd66e05557de5e5efd4ac95dc11914abeaf51baca2642d42cc76

# docker ps -a
CONTAINER ID   IMAGE               COMMAND                  CREATED         STATUS         PORTS                                       NAMES
ef05e0f6c4f5   registry            "/entrypoint.sh /etc…"   9 minutes ago   Up 9 minutes   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   S3-registry
  • Docker 레지스트리 이미지를 받습니다.
  • registry:latest 이미지를 컨테이너로 실행합니다.
  • AWS S3 저장소 설정 
  • > SETTINGS_FLAVOR : 이미지 저장 방법입니다. S3를 설정합니다.
  • > AWS_BUCKET : 이미지 데이터를 저장할 S3 버킷 이름입니다.
  • > STORAGE_PATH : 이미지 데이터 저장할 경로입니다.
  • > AWS_KEY : AWS 액세스 키를 설정합니다.
  • > AWS_SECRET : AWS 시크릿 키를 설정합니다.

 

 

 

 

 

 

 

반응형
반응형

 

Docker 개인 저장소 구축하기

 

보통은 알려진 CA에서 발급한 TLS 인증서를 사용하여 레지스트리를 보호하는 것이 매우 권장되지만, 자체 서명된 인증서를 사용하거나 암호화되지 않은 HTTP 연결을 통해 레지스트리를 사용하도록 선택할 수 있습니다. 만약 인터넷이 안되거나 그냥 개인이 따로 저장하겠다고하면 HTTP 연결을 통해 개인 저장소를 구축할 수 있습니다.

 

Docker 명령은 기본적으로 Docker Hub를 사용합니다. 

Docker 저장소 서버는 Docker registry 서버라고 부릅니다.

# docker push 명령으로 레지스트리 서버에 이미지를 올리고,

# docker pull 명령으로 이미지를 받을 수 있습니다.

 

 

 

insecure-registry 설정

# vi /etc/docker/daemon.json

{
  "insecure-registries" : ["192.168.0:201:5000"]
}

# systemctl restart docker
  • daemon.json 생성 및 해당 내용 저장
  • docker restart

 

 

 

개인 저장소가 잘 구축 되었는지 ubuntu 서버 2개로 테스트 해봤습니다.

 

 

개인저장소 구축한 서버

# docker run -d -p 5000:5000 --name hello-registry \
> -v /tmp/registry:/tmp/registry \
> registry
2976da0da8d746a1ba60f88930dd46bff8143795c516dd9653fcf1a6942432e5
#
# docker ps 
CONTAINER ID   IMAGE               COMMAND                  CREATED          STATUS          PORTS                                       NAMES
2976da0da8d7   registry            "/entrypoint.sh /etc…"   3 seconds ago    Up 2 seconds    0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   hello-registry
  • 이미지 파일은 호스트의 /tmp/registry 디렉터리에 저장됩니다.

 

 

 

이미지 tag, push 설정하기

# docker build --tag hello:0.1 .

# docker images
REPOSITORY                       TAG           IMAGE ID       CREATED          SIZE
hello                            0.1           75f0625417ad   36 seconds ago   232MB

# docker tag hello:0.1 localhost:5000/hello:0.1

# docker images
REPOSITORY                       TAG           IMAGE ID       CREATED              SIZE
hello                            0.1           75f0625417ad   About a minute ago   232MB
localhost:5000/hello             0.1           75f0625417ad   About a minute ago   232MB

# docker push localhost:5000/hello:0.1
The push refers to repository [localhost:5000/hello]
2d1630f34efb: Pushed 
0492b535da40: Pushed 
1db69eba3ab3: Pushed 
b9b64cd744c9: Pushed 
83109fa660b2: Pushed 
30d3c4334a23: Pushed 
f2fa9f4cf8fd: Pushed 
0.1: digest: sha256:6b8296113e568e6184eb893fd02f006034c26b0778c86922cd65554f0f379106 size: 1782
  • 가지고있는 Dockerfile을 build 하여 name : hello | tag : 0.1로 image 생성
  • tag 생성 : docker tag <이미지이름>:<tag> <registry URL>/<이미지 이름>:<tag>
  • push 명령 : docker push <registry URL>/<이미지 이름>:<tag>

 

 

 

개인저장소에 있는 이미지를 Pull 받을 서버

# docker pull 192.168.0.201:5000/hello:0.1
Error response from daemon: Get "https://192.168.0.201:5000/v2/": http: server gave HTTP response to HTTPS client
  • pull 명령으로 개인저장소 서버에서 이미지를 받아오는데 오류 로그 발생
  • 해결방법 : insecure-registries 설정 필요

 

 

# vi /etc/docker/daemon.json
{
          "insecure-registries" : ["192.168.0.201:5000"]
}

# docker pull 192.168.0.201:5000/hello:0.1
0.1: Pulling from hello
2e6e20c8e2e6: Pull complete 
0551a797c01d: Pull complete 
512123a864da: Pull complete 
0cde67eab025: Pull complete 
119857f951bc: Pull complete 
41786f85cd57: Pull complete 
56705ad25a7d: Pull complete 
Digest: sha256:6b8296113e568e6184eb893fd02f006034c26b0778c86922cd65554f0f379106
Status: Downloaded newer image for 192.168.0.201:5000/hello:0.1
192.168.0.201:5000/hello:0.1

# docker images
REPOSITORY                 TAG       IMAGE ID       CREATED          SIZE
192.168.0.201:5000/hello   0.1       75f0625417ad   14 minutes ago   232MB
  • insecure-registries 설정 후 pull 했을때 이미지 받아오기 완료

 

 

 

참고링크 : https://docs.docker.com/registry/insecure/

 

 

 

 

 

 

 

 

반응형
반응형

 

 

도커 명령어를 입력하려면 관리자 계정이 아니고는 sudo를 항상 입력해줘야하지만 해당 명령어를 이용하여 일반 사용자에서도 명령어 입력이 가능하게 설정하는 방법입니다.

$ sudo usermod -aG docker ${USER}
$ sudo service docker restart

현재 계정에서 로그아웃 한 뒤 다시 로그인합니다.

 

 

 

 

 

반응형
반응형

 

Error response from daemon 해결 방법

 

Ubuntu 서버에서 처음으로 Docker login을 하게되면 아래와 같은 에러가 발생하는 경우가 있다.

Error response from daemon: Get https://registry-1.docker.io/v2/: unauthorized: incorrect username or password

 

 

 

구글의 DNS 주소를 /etc/resolv.conf 에 추가해주세요.

# vi /etc/resolv.conf

nameserver 8.8.8.8
naveserver 8.8.4.4

 

 

설정이 완료되었다면, Docker 데몬을 restart 해주세요.

# systemctl daemon-reload
# systemctl restart docker

 

 

 

또한 login 계정에 @뒤에 이메일주소가 들어가있는지 확인해보세요.

# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: djwlstn12345
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

 

만약 위 방법으로 안된다면 docker logout 후 다시 login 해보시길 바랍니다.

# docker logout

 

 

 

 

 

 

감사합니다.

 

 

반응형
반응형

 

 

 

 

개념


 

 

 

F5 - Local Traffic Manager(LTM) 란 ?

  • L4 ~ L7 Load Balancing, 트래픽 분석 및 제어, SSL암복호화
  • HTTP 가속 및 최적화 (HTTP Compression / RamCache, TCP최적화)

 

 

ADC Switch 란 ?

  • Virtual IP를 이용한 서버 부하분산을 기본으로 압축, 캐쉬, SLB, Traffic Control, IPv6 Gateway, SSL Offload, TCP Offload, DDoS 방어 등 Payload를 이용한 다양한 트래픽 제어 기능을 제공합니다.

 

 

L7 Switch 란 ?

  • 헤더의 데이터 영역을 분석 및 Payload 핸들링 가능한 스위치
  • 물리적인 주소, IP주소, TCP/UDP의 Port 번호를 기반으로 동작하는 L2/L3/L4 스위치와는 다르게 모든 헤더의 정보를 기본적으로 포함하고 있으며, Packet의 Data Field에 기반하여 스위칭 기능 및 서비스를 제공합니다.
  • ex) L7 Swtiching : URL/URI Switching, Payload 확인, 수정, 차단, 트래픽 리다이렉션, Security 정책을 적용합니다. 

 

 

 

 

 

 

기능


F5 BIG-IP

 

 

계정 패스워드 변경(Change Password)

[root@localhost:NO LICENSE:Standalone] config # tmsh
root@(localhost)(cfg-sync Standalone)(NO LICENSE)(/Common)(tmos)# modify auth user admin password [Password]

 

 

 

 

 

 

반응형
반응형

 

 

시크릿(Secret)

시크릿은 암호, 토큰 또는 키와 같은 소량의 중요한 데이터를 포함하는 오브젝트이다. 이를 사용하지 않으면 중요한 정보가 파드 명세나 컨테이너 이미지에 포함될 수 있다. 시크릿을 사용한다는 것은 사용자의 기밀 데이터를 애플리케이션 코드에 넣을 필요가 없음을 뜻한다.

 

시크릿은 시크릿을 사용하는 파드와 독립적으로 생성될 수 있기 때문에, 파드를 생성하고, 확인하고, 수정하는 워크플로우 동안 시크릿(그리고 데이터)이 노출되는 것에 대한 위험을 경감시킬 수 있다. 쿠버네티스 및 클러스터에서 실행되는 애플리케이션은 비밀 데이터를 비휘발성 저장소에 쓰는 것을 피하는 것과 같이, 시크릿에 대해 추가 예방 조치를 취할 수도 있다.

 

시크릿은 컨피그맵과 유사하지만 특별히 기밀 데이터를 보관하기 위한 것이다.

주의

쿠버네티스 시크릿은 기본적으로 API 서버의 기본 데이터 저장소(etcd)에 암호화되지 않은 상태로 저장된다. API 접근(access) 권한이 있는 모든 사용자 또는 etcd에 접근할 수 있는 모든 사용자는 시크릿을 조회하거나 수정할 수 있다. 또한 네임스페이스에서 파드를 생성할 권한이 있는 사람은 누구나 해당 접근을 사용하여 해당 네임스페이스의 모든 시크릿을 읽을 수 있다. 여기에는 디플로이먼트 생성 기능과 같은 간접 접근이 포함된다.

1. 시크릿을 안전하게 사용하려면 최소한 다음의 단계를 따르는 것이 좋다.

2. 시크릿에 대해 저장된 데이터 암호화(Encryption at Rest)를 활성화한다.시크릿 읽기 및 쓰기를 제한하는 RBAC 규칙을 활성화 또는 구성한다.

3. 파드 생성 권한을 가진 사람은 암묵적으로 시크릿에 접근할 수 있음에 주의한다.적절한 경우, RBAC과 같은 메커니즘을 사용하여 새로운 시크릿을 생성하거나 기존 시크릿을 대체할 수 있는 주체(principal)들을 제한한다.

 

시크릿의 사용

파드가 시크릿을 사용하는 주요한 방법으로 다음의 세 가지가 있다.

  • 하나 이상의 컨테이너에 마운트된 볼륨 내의 파일로써 사용.
  • 컨테이너 환경 변수로써 사용.
  • 파드의 이미지를 가져올 때 kubelet에 의해 사용.

쿠버네티스 컨트롤 플레인 또한 시크릿을 사용한다. 예를 들어, 부트스트랩 토큰 시크릿은 노드 등록을 자동화하는 데 도움을 주는 메커니즘이다

 

 

 

 

Secret 사용

 

# secret 배포 YAML 파일 생성 (암호화 base64 지원)
jinsu@jinsu:~$ cat secret.yaml 
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: YWRtaW4=
  password: MWYyZDFlMmU2N2Rm
jinsu@jinsu:~$

# secret 생성 및 확인
jinsu@jinsu:~$ kubectl apply -f secret.yaml 
secret/mysecret created
jinsu@jinsu:~$ 
jinsu@jinsu:~$ kubectl get secret
NAME                  TYPE                                  DATA   AGE
default-token-vm2hl   kubernetes.io/service-account-token   3      8h
mysecret              Opaque                                2      5s
jinsu@jinsu:~$ 

# secret 상세정보 
jinsu@jinsu:~$ kubectl get secret mysecret -oyaml
apiVersion: v1
data:
  password: MWYyZDFlMmU2N2Rm
  username: YWRtaW4=
kind: Secret
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","data":{"password":"MWYyZDFlMmU2N2Rm","username":"YWRtaW4="},"kind":"Secret","metadata":{"annotations":{},"name":"mysecret","namespace":"default"},"type":"Opaque"}
  creationTimestamp: "2022-08-14T09:37:57Z"
  name: mysecret
  namespace: default
  resourceVersion: "19863"
  selfLink: /api/v1/namespaces/default/secrets/mysecret
  uid: 221983f8-81b7-4e62-bd7d-736b88dcdba8
type: Opaque
jinsu@jinsu:~$ 


# 같은 secret2를 생성 (암호화하지 않음)
jinsu@jinsu:~$ cat secret2.yaml 
apiVersion: v1
kind: Secret
metadata:
  name: mysecret2
type: Opaque
stringData:
  username: admin
  password: password
jinsu@jinsu:~$ 

# secret2 생성 및 확인
jinsu@jinsu:~$ kubectl apply -f secret2.yaml 
secret/mysecret2 created
jinsu@jinsu:~$ kubectl get secret
NAME                  TYPE                                  DATA   AGE
default-token-vm2hl   kubernetes.io/service-account-token   3      8h
mysecret              Opaque                                2      6m39s
mysecret2             Opaque                                2      4s
jinsu@jinsu:~$ 

# secret2 상세정보를 보면 계정과 패스워드가 자동 암호화되는것을 볼 수 있다.
jinsu@jinsu:~$ kubectl get secret mysecret2 -oyaml
apiVersion: v1
data:
  password: cGFzc3dvcmQ=
  username: YWRtaW4=
kind: Secret
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Secret","metadata":{"annotations":{},"name":"mysecret2","namespace":"default"},"stringData":{"password":"password","username":"admin"},"type":"Opaque"}
  creationTimestamp: "2022-08-14T09:44:32Z"
  name: mysecret2
  namespace: default
  resourceVersion: "20151"
  selfLink: /api/v1/namespaces/default/secrets/mysecret2
  uid: dec64c7d-f910-4e3d-8da3-0317118a5fa1
type: Opaque
jinsu@jinsu:~$

 

환경변수로 secret 설정

# secret 환경변수 YAML파일 생성
jinsu@jinsu:~$ cat cat-env.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: cat-env
spec:
  containers:
    - name: cat-env
      image: k8s.gcr.io/busybox
      command: [ "printenv" ]
      args: [ "USER" ]
      env:
      - name: USER
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: username
  restartPolicy: OnFailure

jinsu@jinsu:~$

jinsu@jinsu:~$ kubectl apply -f cat-env.yaml
pod/cat-env created
jinsu@jinsu:~$ 

jinsu@jinsu:~$ kubectl logs cat-env
admin
jinsu@jinsu:~$

 

 

 

 

 

참고자료

https://kubernetes.io/ko/docs/concepts/configuration/secret/

 

 

 

 

 

 

 

반응형

+ Recent posts