반응형

아래 Script는 Kuberentes Node의 IP Address를 얻어와서, 이 IP Address로 Node에 SSH 접속하여 'shutdown' 명령을 수행하는 예제이다.

 

#!/bin/bash

for ip in $(oc get nodes  -o jsonpath='{.items[*].status.addresses[?(@.type=="InternalIP")].address}')
do
   echo "reboot node $ip"
   ssh -o StrictHostKeyChecking=no core@$ip sudo shutdown -r -t 3
done
반응형

Geneve (Generic Network Virtualization Encapsulation) protocol

 

Compare and Contrast VXLAN to GENEVE Encapsulation Format

 

GENEVE Variable Extension Header

 

 

Comparison Table: VXLAN vs Geneve

PARAMETER VXLAN GENEVE
Abbreviation for VXLAN (Virtual Extensible LAN) GENEVE (Generic Network Virtualization Encapsulation)
Developed by VMware, Arista Networks and Cisco VMware, Microsoft, Red Hat and Intel
Protocol UDP UDP
Port no 4789 6081
Header length 8 byte 16 byte
Transport security, service chaining, in-band telemetry Not supported Supported
RFC VXLAN is officially documented by the IETF in RFC 7348 RFC 8926
Protocol Identifier No Yes
non-client payload indication No Yes
Extensibility. No. Infact all fields in VXLAN header have predefined values Yes
Hardware friendly vendor extensibility mechanism Limited Yes
Term used for Tunnel Endpoints VTEP TEP
반응형

Kuberentes를 사용하면서 이해하기 어려운 부분이 CNI(Cluter Network Interface)이다.

실제로 각 CNI 마다 동작하는 방식과 구현이 다른데 CNI라고 퉁쳐서 표현하다보니 Kubernetes를 사용하는 운영자 입장에서는 CNI가 어떻게 IP Traffic(트래픽)을 처리하는지 알기 어렵다.

여러 종류의 CNI 중에서 내가 사용하고 있는 특정 CNI에 대해서 깊이 있게 설명하는 자료도 별로 없으니 스터디하기가 더욱 어렵다.

 

나의 일터에서는 주로 Openshift SDN을 사용하기 때문에 오늘은 시간을 내서 Openshift SDN을 깊게 파헤쳐보려 한다.

 

우선 아래 그림에 있는 빨간색 숫자를 따라 가면서 보자.

이 빨간 색 숫자의 순서대로 요청 패킷이 처리된다.

 

Openshift SDN 동작 방식

 

 

그림에 순서에 맞게 설명을 적었기 때문에 전반적인 설명은 필요 없을 것 같다.

단, 복잡한 처리가 있는 부분을 좀더 살펴 본다면,

 

(2) Netfilter를 이용하여 DNAT, SNAT 처리

Kubernetes Pod 정보를 조회해보면 Cluster IP를 볼 수 있다. 바로 그 Pod의 Cluster IP로 DNAT 처리되는 것이다.

즉, 10.10.12.208:8080 목적지 주소를 보고, 이 주소 값과 Mapping되는 Kubernetes Pod IP를 찾고 Netfilter를 이용하여 DNAT 처리한다.

Worker 1 Node에서 iptables 명령을 이용하여 Netfilter의 Chain Rule을 조회하면 실제로 아래와 같이 정보를 볼 수 있다.

이 Chain Rule대로 관련 Packet 조건을 찾고, 그 조건에 맞는 Netfilter Chain을 따라가면서 DNAT처리하는 것이다.

 

$  iptables -t nat -L KUBE-SERVICES -nv | grep 10.10.12.208
 1760  106K KUBE-FW-BAR7JSQD2GL6A2KT  tcp  --  *      *       0.0.0.0/0            10.10.12.208         /* almighty/almighty5:web loadbalancer IP */ tcp dpt:8080

… 중간 생략 …

$ iptables -t nat -L KUBE-SEP-ZBWV76PMI2XAVMCD -nv
 1949  117K DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            /* almighty/almighty5:web */ tcp to:10.128.2.151:8080

—> kube-proxy가 실제 iptables 룰 생성시 사용한 명령은 아래와 같음.
KUBE-SEP-ZBWV76PMI2XAVMCD -p tcp -m comment --comment "almighty/almighty5:web" -m tcp -j DNAT --to-destination 10.128.2.151:8080

 

만약 Destination Pod가 다른 Worker Node에 있다면, 다른 Worker Node로 IP Packet을 보내기 위해 tun0 인터페이스를 이용하여야 한다. 이때 tun0의 IP Address로 SNAT 하도록 하는 Chain Rule 적용을 받는다.

 

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
OPENSHIFT-MASQUERADE  all  --  anywhere             anywhere             /* rules for masquerading OpenShift traffic */
KUBE-POSTROUTING  all  --  anywhere             anywhere             /* kubernetes postrouting rules */

Chain KUBE-POSTROUTING (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere             mark match ! 0x1/0x1
MARK       all  --  anywhere             anywhere             MARK xor 0x1
MASQUERADE  all  --  anywhere             anywhere             /* kubernetes service traffic requiring SNAT */ random-fully

 

 

(3) DST IP로 갈 수 있는 Routing Table을 조회하여 tun0로 Packet을 보냄

아마 대부분 Kubernetes 사용자가 헷갈려하는 부분일 것이다.

만약 Destination Pod가 같은 Worker Node에 있다면, 단순히 Netfilter가 처리한 대로 Packet Forward만 하면 된다.

그런데, Destination Pod가 다른 Worker Node에 있다면 관련있는 물리 Network Port를 찾아서 보내야 한다.

위 그림에서 Worker 1과 Worker 2의 tun0 간에는 ARP Packet이 브로드캐스팅되므로, 이미 Worker 1에서는 Destination Pod IP에 해당하는 MAC Address를 알고 있다. 

(참고: arp 명령으로 Worker 1 노드의 ARP Table 조회 가능)

따라서 일반적인 L2 Forward 처리와 동일하게 처리된다.

 

 

(4) ~ (5) Encapsulate, Decapsulate

일반적인 VxLAN 터널링을 사용하여 Worker Node간에 Pod의 메시지를 전송해준다.

VxLAN 터널링 때문에 tun0의 MTU는 1450 byte가 된다. (왜냐하면, 터널링 헤더 메시지 때문에 50 Byte만큼 tun0 포트의 MTU가 작아지게 된다)

 

 

나머지 절차는 모두 L2 Switching이기 때문에 딱히 설명할 것이 없다.

 

응답 메시지는 따로 설명하지 않았다.

왜냐하면,

L2 Switching 구간은 단순히 Source Address와 Destination Address를 반대로 뒤집으면 되고,

Netfilter가 SNAT 처리한 부분의 Connection Track 정보를 찾아서 원래의 주소값으로 치환해주면 되기 때문이다.

 

 

블로그 작성자: sejong.jeonjo@gmail.com

 

반응형

올해 대학 입시를 치르는 아들 때문에 몇개 대학교의 입시 정보를 찾아봤다.

각 대학교 입학처에서 직접 공개한 자료이니까 믿을 수 있고, 합격/불합격에 대한 점도표까지 공개한 학교의 자료는 완전 도움이 된다.

 

 

 

 

 

카톨릭대학교 입학처 자료 - 2022년 수시/정시 전형 결과

https://youtu.be/WN3lE5s2SEg?t=962 

 

 

카톨릭대학교 학생부종합 입시결과 (2022년 입시)

 

카톨릭대학교 학생부교과 입시결과 (2022년 입시)

 

 

인천대학교 입학처 자료 - 2022년 수시/정시 전형 결과 

 

인천대학교 입학안내

2022학년도 수시모집 입학전형 지원현황 및 결과를 붙임과 같이 공지하오니 참고하시기 바랍니다. 정정사유  - 학생부종합전형(자기추천) 분포도 추가 게시  - 입시자료 기초데이터 오류로 인한

www.inu.ac.kr

 

 

경기대학교 입학처 자료 - 2022년 수시/정시 전형 결과

특징: 점도표가 있어서 분석하기 좋다.

 

경기대학교 입학처 수시 | 전년도 입학통계

 

enter.kyonggi.ac.kr

 

경희대학교 입학처 자료 - 2022년 수시/정시 전형 결과

특징: 점도표가 있어서 분석하기 좋다.

 

경희대학교

--> --> 수시 공지사항 모집요강 경쟁률 기출문제 서식파일 입시결과 전형모아보기

iphak.khu.ac.kr

 

 

중앙대학교 입학처 자료 - 2022년 수시/정시 전형 결과

http://admisfile.cau.ac.kr/download/2023_cau_becausnews_s.pdf

 

 

숭실대학교 입학처 자료 - 2022년 수시/정시 전형 결과

https://iphak.ssu.ac.kr/board/statistics_view.asp?number=226&srchoption=&keyword=&flag=1&page_no=1_1_6&page=1 

 

숭실대학교입학처

Bringing Truth and Service to the World

iphak.ssu.ac.kr

 

 

서울과학기술대학교 입학처 자료 - 2022년 수시/정시 전형 결과

https://admission.seoultech.ac.kr/cms/FR_BBS_CON/BoardView.do?pageNo=1&pagePerCnt=15&MENU_ID=810&CONTENTS_NO=&SITE_NO=2&BOARD_SEQ=22&BBS_SEQ=37&P_BBS_SEQ=&PWD=&SEARCH_FLD=&SEARCH=#; 

 

서울과학기술대학교 입학처 입시도우미 | 입시결과

 

admission.seoultech.ac.kr

 

 

홍익대학교 입학처 자료 - 2022년 수시/정시 전형 결과

 

홍익대학교 입학관리본부

 

admission.hongik.ac.kr

 

 

 


 

 

 

아래는 인터넷에 떠도는 자료들 (단순 참고용으로 보는 것이 좋을 듯)

 

 

2023 서강대학교 수시모집 학종 전형일정 서강대 수시 교과 논술 수시등급 수능최저

2023 서강대학교 수시모집 학종 전형일정 서강대 수시 교과 논술 수시등급 수능최저 2023 서강대 수시모집 ...

blog.naver.com

https://blog.naver.com/study_dream2/222785671102

 

2022학년도 아주대학교 교과, 학종, 수시등급 아주대 논술 경쟁률 수시 입시결과

2022학년도 아주대학교 교과, 학종, 수시등급 아주대 논술 경쟁률 수시 입시결과 ※ 2022학년도 아주대 수...

blog.naver.com

 

 

 

2022 경희대학교 수시등급, 경쟁률 경희대 수시 입시결과 교과, 학종, 논술

2022 경희대학교 수시등급, 경쟁률 경희대 수시 입시결과 교과, 학종, 논술 ※ 2022 경희대 수시등급 교과(...

blog.naver.com

 

 

https://blog.naver.com/study_dream2/222792107424

 

2022 건국대 수시등급, 학종, 교과 경쟁률 건국대학교 논술 수시 입시결과

2022 건국대 수시등급, 학종, 교과 경쟁률 건국대학교 논술 수시 입시결과 ※ 2022 건국대학교 수시등급, ...

blog.naver.com

 

 

https://blog.naver.com/study_dream2/222722813042

 

2022 단국대 수시등급, 논술, 학종 단국대학교 수시 입시결과, 경쟁률 (죽전캠퍼스)

2022 단국대 수시등급, 논술, 학종 단국대학교 수시 입시결과, 경쟁률 (죽전캠퍼스) ※ 2022 단국대학교 수...

blog.naver.com

 

 

 

 

2022 중앙대 수시등급 교과, 학종 경쟁률 중앙대학교 논술 수시 입시결과

2022 중앙대 수시등급 교과, 학종 경쟁률 중앙대학교 논술 수시 입시결과 2022 중앙대학교 수시등급 교과, ...

blog.naver.com

 

 

2022학년도 숭실대학교 학종, 교과, 논술 경쟁률, 숭실대 수시등급, 수시 입시결과

2022학년도 숭실대학교 학종, 교과, 논술 경쟁률, 숭실대 수시등급, 수시 입시결과 2022학년도 숭실대 수시...

blog.naver.com

 

 

https://blog.naver.com/study_dream2/222801016933

 

2022학년도 서울과기대 수시등급 논술, 학종 서울과학기술대학교 교과 경쟁률, 수시 입시결과

2022학년도 서울과기대 수시등급 논술, 학종 서울과학기술대학교 교과 경쟁률, 수시 입시결과 [2022학년도 ...

blog.naver.com

 

https://blog.naver.com/study_dream2/222794982629

 

2022 국민대학교 수시 입시결과, 국민대 수시등급 교과, 학종 경쟁률

2022 국민대학교 수시 입시결과, 국민대 수시등급 교과, 학종 경쟁률 ※ 2022 국민대 수시등급 교과 경쟁률...

blog.naver.com

 

반응형

내가 입사한 첫 W 회사는 내가 입사하던 해에 창립을 했고, 1~2년 후 상장(IPO)하겠다는 목표가 있어서 직원들 모두 우리 사주에 대한 기대감이 컸었다.

그런데, 만 3년 동안 일하면서 그 기대감은 꿈으로 끝났다.

처음 2년 동안은 영업 실적이 증가하고, 회사 분위기도 "아자~아자~ 으쌰~ 으쌰~" 하는 분위기였는데

경영자(CEO)의 몇 차례 판단 미스로 인한 몇 개 사업부가 폭싹 망하면서 회사 전체적인 재무 상태가 안 좋아졌다.

입사 후 4년차가 될 무렵, W 회사의 상장은 물 건너갔다고 판단하고 나는 IPO가 예정되어 있는 또 다른 T 회사로 이직했다.

 

T 회사에 입사 후, 1년 만에 IPO가 되었고 직원들 모두 좋은 분위기 속에서 우리 사주를 청약했다.

그런데 이게 무슨 일인고..... ㅠㅠ

막상 상장하는 날에 전체적인 주식 시장 분위기가 냉각되면서 상장 한달만에 30%가 뚝 떨어졌다.

빚까지 내면서 우리 사주를 청약한 직원들은 많이 허탈해했고, 이 빚을 해결해야 하는 고민꺼리가 생겼다.

회사 주식 가격이 더 떨어지기 전에 우리 사주를 팔고 회사를 떠나겠다는 사람도 많아졌다. 팀 동료들이 마구마구 회사를 떠났다 ㅠㅠ

이런 어수선한 분위기는 거의 1년이 갔다.

나의 결론: 내가 다니는 회사의 상장(IPO)를 통해 쉽게 돈벌기는 쉽지 않다.

 

그렇게 욕심을 버리고 한 회사만 꾸준하게 다닌지 19년이 넘었는데, 최근 2년 동안 다른 회사들은 IPO만 하면 빵빵 터리는 분위기이다.

나의 우직한 판단이 틀린건가? 

이렇게 남들이 주식으로 돈 버는 분위기 속에서 나만 아무것도 하지 않고 허탈하게 2년을 보냈는데, 또 최근 분위기는 180도 바뀐 것 같다.

주식 시장 분위기가 좋을 때, IPO했던 회사의 우리 사주가 보호 예수가 풀릴 쯤, 우리 사주는 막대한 손실을 내고 있다.

(19년 전 나의 회사랑 똑같은 상황 ㅠㅠ)

 

 

자세한 내용은 아래 매일경제 신문에 있다.

 

 

카뱅 직원, 1인당 1억 손실…쪽박 위기 처한 우리사주

한때 8억 차익 전망 있었지만 주가폭락 속 보호예수해제 임박 크래프톤 직원도 6천만원 손실

www.mk.co.kr

 

 

이미지 출처: 금융감독원 전자공시시스템 투자설명서

 

반응형

 


 

Case (A)

  연동할 Registry 주소가 Server 인증서의 SAN(Subject Alt Name) 리스트에 포함되지 않은 경우

연동하려는 Registry 주소가 인증서 발급 시 설정한 SAN(Subject Alternative Name) 리스트에 포함되어 있지 않으면 발생하는 인증 에러이다.

따라서 SAN(Subject Alternative Name) 리스트에 있는 주소 값으로 접속 시도해야 한다.

##
## Certificate(인증서) 만들 때, SAN(Subject Alt Name)에 없는 주소 값을 이용하여
## Container Image Registry에 접근하려고 하면, 아래와 같이 오류가 발생한다.
## 즉, Docker Registry(v2) 또는 Harbor를 구동할 때 사용한 Server Certificate이 있을 텐데,
## 그 Certificate을 만들 때 "Subject Alternative Name" 리스트에 서버의 domain name 주소나 IP Address를
## 입력했었을 것이다.
## 그 입력했던 "Subject Alt Name" 리스트 중에 아래와 같이 Registry에 접속할 때 사용한 Server의 주소 값이 없으면
## "Authenticting creds error"가 발생한다.
##

$  podman login 10.10.12.10:5000
Username: myid
Password: ~~~~~
Error: error authenticating creds for "10.10.12.10:5000": error pinging docker registry 10.10.12.10:5000: Get "https://10.10.12.10:5000/v2/": x509: cannot validate certificate for 10.10.12.10 because it doesn't contain any IP SANs


##
## 인증서의 Subject Alt Name과 동일한 값으로 Registry에 접근하면 문제 없이 접속된다.
## 즉, 아래 예제로 본다면,  "my-registry.my-domain"이 
## 인증서의 Subject Alt Name인 것이다.
##

$ podman login my-registry.my-domain:5000
Username: myid
Password: ~~~~~
Login Succeeded!

 

 

Case (B) 

  Client OS에 Server Certificate이 등록되지 않은 경우

정확히 표현하면,  Podman 명령, Docker 명령을 실행하려는 장비에 Harbor 또는 Docker Registry의 Server Certificate(인증서)가 등록되어 있지 않은 경우에 이런 Unknown Authority 에러가 발생한다.

보통 Self-signed Certificate을 사용한 경우라면, 이 인증 에러가 발생할 것이다.

심각한 에러는 아니고, Podman명령을 수행할 장비(예: Macbook, Ubuntu, Windows 10, Windows 11)에서 아래와 같이 OS에 Self-signed Certificate을 신뢰(Trust)하겠다는 명령만 수행하면 된다.

##
## podman 명령이나 docker 명령을 수행하는 Client OS 쪽에 CA로부터 Sign받은 Server Certificate 이 없는 경우,
## 아래와 같이 인증 에러가 발생한다.
##

$ podman login my-registry.my-domain:5000

Username: myid
Password: ~~~~~
Error: authenticating creds for "my-registry.my-domain:5000": 
  error pinging docker registry registry.base.twcm.cloud:5000: 
  Get "https://registry.base.twcm.cloud:5000/v2/": x509: 
  certificate signed by unknown authority

$


##
## 이럴 때는 CA에게 Sign받은 Certificate을 아래와 같이 Client OS에 복사해주고 등록(Update)하면 된다.
##
## 참고 사항:  my-server-domain.crt 파일은 Image Registry를 구동할 때 사용했던 파일이다.
##          (즉, my-server-domain.crt는 harbor 구동시 사용한 server certificate이라는 뜻이다)
##

$ cp  my-server-domain.crt  /etc/pki/ca-trust/source/anchors/my-server-domain.crt

$ update-ca-trust

$ podman login my-registry.my-domain:5000

Username: myid
Password: ~~~~~
Login Succeeded!

$

 

 

참고: 위 설명은 CentOS, RHEL을 사용할 때를 예로 든 것이고, Ubuntu OS에서 Server Certificate 등록하는 방법은 아래와 같다.
##
## Ubuntu OS를 사용하는 경우는 아래처럼 update-ca-certificates 명령을 사용해야 한다.
## Ubuntu에서 Certificate을 등록하는 방법은 CentOS, RHEL 8와 다르다.
##

$ cp  my-domain.crt  /usr/local/share/ca-certificates/domain.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.

$ podman login my-registry.my-domain:5000

Username: myid
Password:
Login Succeeded!

$

 

 

참고: Mac OS(OS X)에 Server Certificate 등록하는 방법
$ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ~/my-new-root-ca.crt

 

 

 

참고: 각 OS별로 Root CA의 인증서(Certificate)를 등록, 삭제하는 방법을 설명하고 있는 블로그

 

 

root certificates 추가하기

https 디버깅할려니 필요해서.. 출처: https://manuals.gfi.com/en/kerio/connect/content/server-configuration/ssl-certificates/adding-trusted-root-certificates-to-the-server-1605.html Adding trusted roo..

opencloud.kr

 

 


게시물 작성자: sejong.jeonjo@gmail.com

 

 

반응형

 

작성일: 2024년 1월 25일

 

 

##
## Container Image 목록 조회하기
##
$  curl -X GET http://192.168.2.2:5000/v2/_catalog

##
## 특정  Image의 tag list 조회하기
##
$  curl -X GET http://192.168.2.2:5000/v2/almighty/tags/list

 

 


 

반응형

Macbook(맥북)을 사용하면서 모니터를 연결하는 대부분의 경우

Macbook <--> USB-C 4K 60Hz 영상 케이블 <--> 4K, 5K 모니터

이런 방식으로 연결한다.

 

 

그런데, 회사 회의실에 가면 대형 모니터가 4K 60Hz가 지원되지만 영상 케이블이 HDMI to HDMI인 경우가 거의 90% 이상이다.

이럴 때, 일반(저렴이) USB-C to HDMI 젠더를 사용하면 4K 30Hz로 Frame Rate가 절반으로 뚝 떨어진다.

(물론, 30만원 이상 가격의 좋은 USB-C 허브를 가진 경우라면 문제 없이 4K 60Hz 영상이 전송된다)

 

 

내가 2만원 이하의 금액으로 해결한 방법은

1)  USB-C to HDMI 케이블을 구입
     --> 결론: 꽝 !!!
                    모니터 화면이 깜빡 깜빡하는 현상이 있다.

 

2)  USB-C to HDMI 젠더 구입 
     --> 결론:  완전 만족  :D
                     모니터 화면 깜빡이는 현상이 없고, 마우스 움직임도 맥 모니터처럼 부드럽다.
                     배송비를 포함해서 15,000원에 만족하면서 쓰고 있다.
                     심지어 이 제품은 60W PD 충전까지 지원한다. ^^
                     HDMI만 지원하는 모니터에서 3840 x 2160 60Hz 영상을 보고자 한다면, 이 제품 추천~
                     

 

+ Recent posts