https://github.com/cloud-init/cloud-init/tree/master/doc/examples

https://cloudinit.readthedocs.io/en/latest/topics/examples.html

#cloud-config
package_upgrade: true
packages:
  - httpd


#cloud-config
package_update: true
package_upgrade: all

packages:
 - httpd24
 - php56
 - mysql55-server
 - php56-mysqlnd

runcmd:
 - service httpd start
 - chkconfig httpd on
 - groupadd www
 - [ sh, -c, "usermod -a -G www ec2-user" ]
 - [ sh, -c, "chown -R root:www /var/www" ]
 - chmod 2775 /var/www
 - [ find, /var/www, -type, d, -exec, chmod, 2775, {}, + ]
 - [ find, /var/www, -type, f, -exec, chmod, 0664, {}, + ]
 - [ sh, -c, 'echo "" > /var/www/html/phpinfo.php' ]


#cloud-config
 power_state:
   delay: "+30"
   mode: poweroff
   message: Bye Bye
   timeout: 30
   condition: True


#cloud-config
runcmd:
 - [ sh, -c, 'echo ==== $(date) ====; echo HI WORLD; echo =======' ]


'Cloud' 카테고리의 다른 글

Terraform에서 user_data를 파일로 지정하고 싶을 때  (0) 2018.06.14
cloud-init example  (0) 2018.06.13
Magic Quadrant for IaaS, Worldwide  (0) 2018.05.29
NAT

기본 권장 아키텍처는

일반적으로 서버는 모두 사설 IP 대역에 두고,

서비스가 필요한 부분은 Cloud LB를 통해서 외부와 연결 하기를 권장합니다.

꼭 Public IP가 필요한 경우는, Public IP를 부여해도 되고, NAT 서버에서 Secondary IP를 할당 해서 1:1 NAT를 해주면 됩니다. 


본 글은 일반적인 NAT 서버 구성방법과, 서버내에 기본 라우팅을 바꾸는 법을 설명합니다. (간단합니다)

서버는 NAT 서버, 일반 서버 두대로 가정합니다.
[NAT 서버] PublicIP: 169.56.100.5 PrivateIP: 10.178.100.10

NAT 서버를 먼저 설정해 봅니다.

# 1. NAT 서비스를 해줄 방화벽 서비스를 활성화 하고
systemctl enable firewalld
systemctl start firewalld

# 2. 커널에서 IP 패킷 포워딩을 허용 해 줍니다.
echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/ip_forward.conf
sysctl -p /etc/sysctl.d/ip_forward.conf

# 3. 방화벽에서 NAT MASQUERADE 설정을 할고, 설정을 반영합니다.
firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -o eth1 -j MASQUERADE
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i eth0 -o eth1 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
firewall-cmd --reload

[일반 사설 IP만 있는 서버] PrivateIP:10.178.100.20
디폴트 라우팅만 NAT서버로 바꾸어 주면 됩니다. (AWS의 경우 라우팅 테이블을 바꾸면 되므로, 이런 걸 해 줄 필요가 없죠.)
다만 사전에 10.0.0.0/8은 원래 Default Gateway를 잘 바라보고 있는지 확인합니다. (없으면 추가 필요)

#변경 전 
[root@tf-vm ~]# ip route
default via 10.178.100.1 dev eth0
10.0.0.0/8 via 10.178.100.1 dev eth0
10.178.100.0/25 dev eth0 proto kernel scope link src 10.178.100.20
161.26.0.0/16 via 10.178.100.1 dev eth0
169.254.0.0/16 dev eth0 scope link metric 1002

#변경 후
[root@tf-vm ~]# ip route change default via 10.178.100.10
[root@tf-vm ~]# ip route
default via 10.178.100.10 dev eth0
10.0.0.0/8 via 10.178.100.1 dev eth0
10.178.100.0/25 dev eth0 proto kernel scope link src 10.178.100.20
161.26.0.0/16 via 10.178.100.1 dev eth0
169.254.0.0/16 dev eth0 scope link metric 1002

# 외부 접속이 가능한지, 그리고 외부로 나갈때 사용되는 IP를 확인해보면, NAT서버의 PublicIP를 사용함을 확인 할 수 있습니다.
[root@tf-vm ~]# curl whatismyip.akamai.com
169.56.100.5

이제 사설 IP만 있는 서버에서도 외부 Repo를 통해 업데이트를 하실 수 있습니다.


https 디버깅할려니 필요해서..

출처: https://manuals.gfi.com/en/kerio/connect/content/server-configuration/ssl-certificates/adding-trusted-root-certificates-to-the-server-1605.html

Adding trusted root certificates to the server

If you want to send or receive messages signed by root authorities and these authorities are not installed on the server, you must add a trusted root certificatemanually.

Use the following steps to add or remove trusted root certificates to/from a server.

Mac OS X

FunctionMethod
Add

Use command:

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ~/new-root-certificate.crt

Remove

Use command:

sudo security delete-certificate -c "<name of existing certificate>"

Windows

FunctionMethod
Add

Use command:

certutil -addstore -f "ROOT" new-root-certificate.crt

Remove

Use command:

certutil -delstore "ROOT" serial-number-hex

Linux (Ubuntu, Debian)

FunctionMethod
Add
  1. Copy your CA to dir /usr/local/share/ca-certificates/
  2. Use command: sudo cp foo.crt /usr/local/share/ca-certificates/foo.crt
  3. Update the CA store: sudo update-ca-certificates
Remove
  1. Remove your CA.
  2. Update the CA store: sudo update-ca-certificates --fresh

NOTE

Restart Kerio Connect to reload the certificates in the 32-bit versions or Debian 7.

Linux (CentOs 6)

FunctionMethod
Add
  1. Install the ca-certificates package: yum install ca-certificates
  2. Enable the dynamic CA configuration feature: update-ca-trust force-enable
  3. Add it as a new file to /etc/pki/ca-trust/source/anchors/: cp foo.crt /etc/pki/ca-trust/source/anchors/
  4. Use command: update-ca-trust extract

NOTE

Restart Kerio Connect to reload the certificates in the 32-bit version.

Linux (CentOs 5)

FunctionMethod
Add

Append your trusted certificate to file /etc/pki/tls/certs/ca-bundle.crt

cat foo.crt >>/etc/pki/tls/certs/ca-bundle.crt

NOTE

Restart Kerio Connect to reload the certificates in the 32-bit version.



IBM은 2017 회복하려 했으나... 완전 추락..

2018은 구글이 재도약, 

알리바바, IBM, Oracle Niche로 밀려남.


Leaders : AWS, MS, Google 그냥 3강체계

Niche : IBM , Oracle , Alibaba Cloud 


Magic Quadrant for Cloud Infrastructure as a Service, Worldwide


'Cloud' 카테고리의 다른 글

Terraform에서 user_data를 파일로 지정하고 싶을 때  (0) 2018.06.14
cloud-init example  (0) 2018.06.13
Magic Quadrant for IaaS, Worldwide  (0) 2018.05.29

IBM Cloud의 S3 호환 Object Storage인 ICOS를 리눅스 특정 폴더에 마운트 해 보도록 하자.

사실 Object Storage를 Block Storage로 마운트 하는건 권장하지 않는 사항이다.

왜냐면 랜덤엑세스가 자주일어나는 Block Storage를 http api로 동작하는 Object Storage로 연동하는게 사실 성능 적인 면에서 매우 좋지 않기 때문이다.

Object Stoage는 모든 동작이 https의 api를 통해서 이루어진다. OS의 System Call과 1:1 맵핑을 다한다고 하더라도
OS와 Disk사이에서 직접 콜이 이루어지는 것이  https api를 통해서 원거리의 서버와 call이 하나하나 이루어진다면 얼마나 비효율적일지 생각해 보라.

다만 ICOS로 전송을 위한 게이트웨이나 버퍼역할을 하는거라면 고려 해 볼 수도 있겠다.

어째든 용도에 맞게 선택해야 하며

일반적인 용도라면 AWS CLI를 활용하길 권장한다. (aws s3 sync라는 훌륭한 커맨드가 있습니다.)


어째든 필요하면 써야하므로, s3fs보다는 성능이 좋다는 goofys를 쓸것이다. (riofs도 나름 빠른데.. goofys 때문에 어째 묻혔다.)

https://github.com/kahing/goofys

사실 그냥 github에서 실행 파일 하나만 받고 마운트만 해주면 끝.

물론 ICOS는 AWS에서 처럼 서버에 role설정이 안되기 때문에 credential 파일을 따로 만들어 주어야 한다.


아래 예제에서 5개 값만 바꾸신후 쉘에서 붙여넣기 하시면 된다.

MOUNT_DIR="/icos" =S3 마운트 할 디렉토리 명.
ACCESS_KEY="yNXRmWIP****" ICOS 엑세스 키입니다. 포털에서 확인 가능.
SECRET_KEY="r5aeBB6******" ICOS 시크릿키입니다. 포털에서 확인 가능.
ICOS_BUCKET_NAME="cloudz"  ICOS의 마운트할 버킷 명. 미리 해당 버킷을 만들어 두어야 한다.
ICOS_ENDPOINT="https://s3.seo-ap-geo.objectstorage.service.networklayer.com" SEO01의 ICOS 사설 엔트포인트로 포털에서 확인 가능. 한국/일본/홍콩은 크로스 리전이여서 자동 동기화(async) 되며 가까운 곳으로 접속하면 된다.
공인으로 하면 트래픽 비용이 나오므로 꼭 사설로 하길 권장한다.

#=============================================================================
MOUNT_DIR="/icos"
ACCESS_KEY="yNXRmWIP9T1**********"
SECRET_KEY="r5aeBB6CnI9qeQgdb*************"
ICOS_BUCKET_NAME="cloudz****"
ICOS_ENDPOINT="https://s3.seo-ap-geo.objectstorage.service.networklayer.com"

#=============================================================================
yum install -y fuse

wget http://bit.ly/goofys-latest -O /usr/local/bin/goofys
chmod 755 /usr/local/bin/goofys

mkdir -p ~/.aws
cat << EOF >> ~/.aws/credentials
[icos]
aws_access_key_id = $ACCESS_KEY
aws_secret_access_key = $SECRET_KEY
EOF
chmod 600  ~/.aws/credentials

mkdir -p $MOUNT_DIR
# goofys --endpoint=$ICOS_ENDPOINT --profile=icos --dir-mode=0777 --file-mode=0666 $ICOS_BUCKET_NAME $MOUNT_DIR
cat << EOF >> /etc/fstab
goofys#$ICOS_BUCKET_NAME  $MOUNT_DIR  fuse  _netdev,allow_other,--endpoint=$ICOS_ENDPOINT,--profile=icos,--dir-mode=0777,--file-mode=0666 0  0
EOF
mount -a


캐시로 체감을 올릴려면 catfs를 적용해서 테스트 해보길 바란다. 앞서 말했지만 Object Storage는 마운트해서 쓰라고 만든게 아니다. 다만, 캐시로 어느정도 극복은 가능하다.

https://github.com/kahing/catfs


goofys --help를 보면 아래 같은 내용이 나온다.
이 중 --uid 와 --gid 를 활용하면 특정 User와 Group ID로 해당 마운트되는 디렉토리 및 파일의 소유자를 설정할 수 있다.
기본은 유저가 root이므로 애플리케이션에서 Wirte를 못하는 권한 문제가 발생할 수 있다.
특정 유저로 파일이 써져야 한다면 --uid value  --gid value 를 추가하면 해당 권한으로 파일이 생성 된다.

따라서, --dir-mode 와 --file-mode 를 상기에서는 Others모두 오픈 했으나, uid,gid를 부여하고 mode는 755,644등 적절한 값으로 조정해서 보안을 좀 더 강화 할 수 있다.

--acl=public-read를 활용하면 오픈 파일을 외부에서 아무 권한없이 https주소를 통해 가져 갈 수 있다. 일반적으로 쓸 일이 없겠지만, Object Storage 자체를 WebServer로 쓴다거나 CDN의 Origin으로 쓸 때는 꼭 필요한 옵션이다. (AWS의 S3를 쓴다면 acl보다는 policy 설정을 권장한다. Softlayer ICOS는 policy 설정이 안되서;;;)


조금 테스트 해보 았다면, 파일을 다른 방법으로 올리거나, 파일명을 바꾸었을때 바로 폴더에 반영 안되는것을 알수 있을 것이다. (기본 1분 필요)
--stat-cache-ttl와 --type-cache-ttl값을 보면 알수 있을 것이다. 허용가능한 수준으로 바꾸되 너무 짧게 하는 건 API Call이 그만큼 자주 발생할 것이므로 비추천한다. (비용과 서버 부하도 모두 증가하게 된다)

NAME:
   goofys - Mount an S3 bucket locally

USAGE:
   goofys [global options] bucket[:prefix] mountpoint

VERSION:
   0.19.0-943e017724ea820eb4185419ef3c41d6f921a324

GLOBAL OPTIONS:
   -o value            Additional system-specific mount options. Be careful!
   --cache value       Directory to use for data cache. Requires catfs and `-o allow_other'. Can also pass in other catfs options (ex: --cache "--free:10%:$HOME/cache") (default: off)
   --dir-mode value    Permission bits for directories. (default: 0755) (default: 493)
   --file-mode value   Permission bits for files. (default: 0644) (default: 420)
   --uid value         UID owner of all inodes. (default: 0)
   --gid value         GID owner of all inodes. (default: 0)
   --endpoint value    The non-AWS endpoint to connect to. Possible values: http://127.0.0.1:8081/
   --profile value     Use a named profile from $HOME/.aws/credentials instead of "default"
   --use-content-type  Set Content-Type according to file extension and /etc/mime.types (default: off)

TUNING OPTIONS:
   --cheap                 Reduce S3 operation costs at the expense of some performance (default: off)
   --no-implicit-dir       Assume all directory objects ("dir/") exist (default: off)
   --stat-cache-ttl value  How long to cache StatObject results and inode attributes. (default: 1m0s)
   --type-cache-ttl value  How long to cache name -> file/dir mappings in directory inodes. (default: 1m0s)

AWS S3 OPTIONS:
   --region value         The region to connect to. Usually this is auto-detected. Possible values: us-east-1, us-west-1, us-west-2, eu-west-1, eu-central-1, ap-southeast-1, ap-southeast-2, ap-northeast-1, sa-east-1, cn-north-1 (default: "us-east-1")
   --storage-class value  The type of storage to use when writing objects. Possible values: REDUCED_REDUNDANCY, STANDARD, STANDARD_IA. (default: "STANDARD")
   --sse                  Enable basic server-side encryption at rest (SSE-S3) in S3 for all writes (default: off)
   --sse-kms key-id       Enable KMS encryption (SSE-KMS) for all writes using this particular KMS key-id. Leave blank to Use the account's CMK - customer master key (default: off)
   --acl value            The canned ACL to apply to the object. Possible values: private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control (default: off)

MISC OPTIONS:
   --help, -h     Print this help text and exit successfully.
   --debug_fuse   Enable fuse-related debugging output.
   --debug_s3     Enable S3-related debugging output.
   -f             Run goofys in foreground.
   --version, -v  print the version


Hello,


Request BIOS settings.

Target server: server1.mypoc.com 

My BIOS Model: SuperMicro X10DRU-i + _R1.02b


Once each setting is completed, please take a screen capture of each setting and update the ticket.


You can reboot the server now.


X10 DRU BIOS setting

1. CPU Configuration

Core enabled: 0


2. Advanced Power Management setting

Power Technology: Custom

Energy performance Tuning: disable

Energy performance BIAS setting: performance

Energy efficient turbo: disable


3. CPU P state control

EIST (P-States): Enable

Turbo mode: enable

P-state coordination: HW_ALL


4. CPU C state control

Package C-state limit: C0 / C1 state

CPU C3 Report: disable

CPU C6 report: enable

Enhanced Halt state: disable

http://vimdoc.sourceforge.net/htmldoc/diff.html


vimdiff는 두개 이상의 파일을 비교/머지 할 수 있는 기능을 제공한다.

vim -d 옵션과 같다.


아래 커맨드 참고,

]c -  다음 차이점으로 이동
[c -  이전 차이점으로 이동
do -  상대 창에서 현재 창으로 차이점 가져오기 (diff obtain)
dp -  현재 창에서 상대 창으로 차이점 밀어넣기 (diff put)
zo -  동일한 내용 폴딩된 것 펼치기(open) 
zc -  동일한 내용 폴딩된 것 접기(close)
Ctrl + ww  - 다음 창으로 포커스 이동
Ctrl + wl - 오른쪽 창으로 포커스 이동
Ctrl + wh - 왼쪽 창으로 포커스 이동

:diffupdate - 차이점 업데이트 (편집하다보면 차이점이 제대로 표시 안될때)
:set diffopt+=iwhite - 비교할때 화이트 스페이스(공백, 탭 등) 무시하기
:set diffopt+=icase - 비교할때 대소문자 차이점 무시하기



.vimrc에다가 조금 튜닝하면 조금 더 편하게 쓸 수 있다. (커맨드라인에 따로 실행 해도 되고)

  • 커서라인 표시 : set cursorline
  • 단축키 변경 ]c → ]   [c → [
  • 하일라이트 색상 변경
if &diff
    set cursorline
    map ] ]c
    map [ [c
    syntax off
endif


'OS > Linux' 카테고리의 다른 글

firewalld 설정  (0) 2018.11.04
SAMBA 설치 at CentOS 7  (0) 2018.08.29
vimdiff 사용법  (0) 2018.04.21
Linux 에서 IP 추출  (0) 2018.04.21
랜덤 내용 특정 사이즈 더미 파일 만들기  (0) 2018.02.21
StrongSwan으로 Cloud끼리 VPN 설정 해보기  (0) 2017.12.17
IP

Linux 에서 IP 추출

ip addr | grep global | awk '{print $2}' | cut -d/ -f1

'OS > Linux' 카테고리의 다른 글

firewalld 설정  (0) 2018.11.04
SAMBA 설치 at CentOS 7  (0) 2018.08.29
vimdiff 사용법  (0) 2018.04.21
Linux 에서 IP 추출  (0) 2018.04.21
랜덤 내용 특정 사이즈 더미 파일 만들기  (0) 2018.02.21
StrongSwan으로 Cloud끼리 VPN 설정 해보기  (0) 2017.12.17

TCP 튜닝 -  CENTOS7

net.ipv4.tcp_congestion_control = bbr 적용을 위해 커널 4.15 로 업그레이드 (4.9이상 필요)

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm yum --disablerepo="*" --enablerepo="elrepo-kernel" list available yum --enablerepo=elrepo-kernel -y install kernel-ml

grub2-set-default 0

#리부팅 커널 버전 확인 reboot uname -sr


상기 커널 업그레이드를 할수 없다면 net.ipv4.tcp_congestion_control = cubic 로 변경 하거나 지운다(default가 cubic)

echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/ip_forward.conf

cat << EOF > /etc/sysctl.d/nettune.conf net.core.rmem_default = 524288 net.core.wmem_default = 524288 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.core.netdev_max_backlog = 30000 net.core.somaxconn = 1024 net.core.default_qdisc = fq net.ipv4.tcp_rmem = 262144 524288 16777216 net.ipv4.tcp_wmem = 262144 524288 16777216 net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_max_syn_backlog = 1024 net.ipv4.tcp_slow_start_after_idle = 0 net.ipv4.tcp_max_tw_buckets = 1800000 net.ipv4.tcp_timestamps = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fastopen = 3 net.ipv4.tcp_congestion_control = bbr EOF


sysctl --system #sysctl -p /etc/sysctl.d/ip_forward.conf #sysctl -p /etc/sysctl.d/nettune.conf

http://meetup.toast.com/posts/55

https://www.tecmint.com/increase-linux-server-internet-speed-with-tcp-bbr/

https://www.vultr.com/docs/how-to-deploy-google-bbr-on-centos-7


iperf3

#클라이언트 iperf3 -V -c 10.178.31.240 -b 1G --get-server-output -P 5 iperf3 -V -c 10.178.31.240 -b 1G --get-server-output --udp -P 5 #서버 iperf3 -V -s




원문 : https://www.clien.net/service/board/cm_nas/11884520


무료인증서 - 3개월 마다 갱신 필요.

Wildcard 가능해짐(2018년3월)

https://community.letsencrypt.org/t/acme-v2-and-wildcard-certificate-support-is-live/55579


DNS 확인 방법으로는 인증서 자동 업데이트가 되지 않으므로, 추가

며칠 후면 인증서 발행 툴들이 보다 쉽게 적용할 수 있도록 업데이트 되리라 믿습니다.


Wildcard이기 때문에 서버로 인증받는게 아닌 도메인의 TXT값을 직접 이력해주어야한다.

아래 과정 중 나오는 값은 _acme-challenge 호스트네임으로 TXT로 입력해주면 된다.

_acme-challenge.opencloud.kr


1. 서버 접속 후 루트 접근 

$ sudo su -


2. certbot 설치

# git clone  https://github.com/certbot/certbot

# cd certbot

# sudo ./certbot-auto --os-packages-only    #여기서 y를 눌러서 필수 패키지를 설치한다.

# ./tools/venv.sh


3. certbot 으로 인증서 발행

# source ./venv/bin/activate

# 도메인명과 이메일을 수정해서 아래 명령을 시행합니다.

sudo ./venv/bin/certbot -d *.도메인명 --email 이메일 --text --agree-tos --server  https://acme-v02.api.letsencrypt.org/directory --manual --preferred-challenges dns --expand --renew-by-default  --manual-public-ip-logging-ok certonly


처음 위 명령을 실행하면 이메일을 등록하라고 합니다. Y 를 누릅니다.

다음으로 certbot 프로그램이 _acme-challenge.도메인명  에 입력할 DNS TXT를 화면상에 보여 줍니다.

_acme-challenge.[도메인명] DNS TXT

도메인에 해당값을 셋팅한 후 엔터를 누르면 해당 도메인을 검증하고 인증서가 발행됩니다.

재실행시 TXT값이 바뀌므로 도메인 셋팅 후 엔터를 누르도록 합니다.


추가) 인증서 확인

# ./venv/bin/certbot certificates

인증서 위치

# /etc/letsencrypt/live/[도메인명]


# 인증서 폴더 접근 권한 설정

sudo chown [사용자명] /etc/letsencrypt/live


--------------------------------------------------------------------------------------------------------------------------

*추가 정보1: PEM ->  PFX (IIS 서버용으로 변환)

sudo openssl pkcs12 -passout pass:[패스워드] -export -out ./cert.pfx -inkey /etc/letsencrypt/live/[도메인명]/privkey.pem -in /etc/letsencrypt/live/[도메인명]/cert.pem -certfile /etc/letsencrypt/live/[도메인명]/chain.pem


변환된 인증서 접근권한 부여


sudo chown [사용자명] ./cert.pfx


*추가 정보2: 와일드카드 외 도메인 등록

익스체인지 서버에서는 와일드카드(*) 도메인 인증서 등록시 에러가 발생하더군요, 아래와 같이 mail을 명시적으로 추가해서 만들어 주니 문제가 없었습니다.

sudo ./venv/bin/certbot -d mail.[도메인명],*.[도메인명]  --email [이메일] --text --agree-tos --server  https://acme-v02.api.letsencrypt.org/directory --manual --preferred-challenges dns --expand --renew-by-default  --manual-public-ip-logging-ok certonly

+ Recent posts