centos7 이미지를 생성해 마스터 노드와 워커 노드를 만듭니다. port 를 생성한 후 trunk 를 만들 것입니다.
이미지 파일이 있는 경로에서 아래 명령어를 실행하세요.
# 1. 이미지 다운로드 (이미 받으셨다면 생략)
wget https://fast-mirror.isrc.ac.cn/centos-cloud/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2
# 2. OpenStack Glance에 이미지 업로드
openstack image create "CentOS-7-Cloud" \
--file CentOS-7-x86_64-GenericCloud.qcow2 \
--disk-format qcow2 \
--container-format bare \
--public \
--property os_distro=centos \
--property os_version=7
K8s 클러스터 노드로 쓰기 적절한 사양인 m1.medium을 생성합니다. (보통 RAM 4GB, CPU 4core, Disk 40GB 정도로 설정합니다.)
openstack flavor create m1.medium \
--id auto \
--ram 4096 \
--disk 40 \
--vcpus 4
설정값 참고:
혹시 포트를 새로 생성해야 한다면 아래 명령어를 사용하세요.
openstack port create --network private --security-group default port0
# 1. 생성한 포트를 Parent Port로 지정하여 Trunk 생성
openstack network trunk create --parent-port port0 trunk0
# 2. Trunk 상태 확인
openstack network trunk list


본 설정은 다음과 같은 가이드라인을 준수합니다.
적용 대상 보안 그룹 ID: 7e09f4d1-6740-4f25-922b-c732b9c0f1d9
외부에서 클러스터를 제어하기 위해 API 서버 포트를 허용합니다.
openstack security group rule create \
--protocol tcp \
--dst-port 6443:6443 \
--remote-ip [controller노드의 ip] \
[rule을 추가하고자 하는 sg 의 id]
Kuryr를 통해 Neutron 포트로 생성되는 Pod 간 통신을 위해 대역을 허용합니다.
openstack security group rule create \
--protocol tcp \
--remote-ip 10.1.0.0/16 \ #[생성한 pod의 대역]
[rule을 추가하고자 하는 sg id]
Service VIP 및 로드밸런서(Octavia) 통신을 위한 대역을 허용합니다.
openstack security group rule create \
--protocol tcp \
--remote-ip 10.2.0.0/16 \ #[생성한 svc의 대역]
[rule을 추가하고자 하는 sg id]
보안 그룹은 기본적으로 해당 그룹에 속한 인스턴스들 간의 트래픽을 차단하는 경우가 많습니다. 동일 클러스터 내 노드 간 원활한 통신을 위해 자신의 보안 그룹 ID를 참조하여 트래픽을 허용하는 규칙을 추가해야 합니다.(마스터 노드와 워커 노드)
# 자기 자신(Default SG)으로부터 들어오는 모든 TCP/UDP/ICMP 트래픽 허용
openstack security group rule create \
--protocol tcp \
--remote-group [rule을 추가하고자 하는 sg id]
openstack security group rule create \
--protocol udp \
--remote-group [rule을 추가하고자 하는 sg id]
openstack security group rule create \
--protocol icmp \
--remote-group [rule을 추가하고자 하는 sg id]
이미지 이름이 centos7이므로 이를 정확히 지정해야 합니다. 생성한 port0 을 nic 로 해서 생성합니다
openstack server create --image "centos7" \
--flavor m1.medium \
--nic port-id=port0 \
--key-name mykey \
worker
마스터 노드도 관리를 위해 외부 IP가 필요하다면 할당해 줍니다.
# 플로팅 IP 생성 (네트워크 이름 확인 후 진행)
openstack floating ip create public2
# 생성된 플로팅 IP를 마스터 노드 포트에 연결
openstack server add floating ip worker <생성된_FLOATING_IP>
포트를 미리 생성해두면 나중에 IP가 바뀌지 않아 관리하기 훨씬 편합니다.
# 마스터 노드용 포트 생성 (네트워크와 보안그룹 지정)
openstack port create --network private --security-group default master_port
생성한 master_port를 NIC로 지정하여 인스턴스를 올립니다.
# 마스터 노드 인스턴스 생성
openstack server create --image "centos7" \
--flavor m1.medium \
--nic port-id=master_port \
--key-name mykey \
master
마스터 노드도 관리를 위해 외부 IP가 필요하다면 할당해 줍니다.
# 플로팅 IP 생성 (네트워크 이름 확인 후 진행)
openstack floating ip create public2
# 생성된 플로팅 IP를 마스터 노드 포트에 연결
openstack server add floating ip master <생성된_FLOATING_IP>
이전 단계에서 마스터/워커 노드를 생성한 후, SSH로 접속합니다.
공식 미러 서버가 모두 종료되었으므로, 보관소(Vault)로 리포지토리 설정을 변경해야 패키지 설치가 가능합니다.
1) 리포지토리 설정 파일 수정 마스터와 워커 노드 각각에서 아래 명령을 수행합니다.
# 리포지토리 설정 파일 편집
vi /etc/yum.repos.d/CentOS-Base.repo
2) 파일 내용 변경 (Mirrorlist 주석 처리 및 Baseurl 변경) 파일 내부의 모든 섹션(base, updates, extras 등)에서 mirrorlist를 주석(#) 처리하고, baseurl을 아래와 같이 수정합니다.
[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
baseurl=http://vault.centos.org/centos/7/os/$basearch/
gpgcheck=1
[updates]
name=CentOS-$releasever - Updates
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
baseurl=http://vault.centos.org/centos/7/updates/$basearch/
gpgcheck=1
[extras]
name=CentOS-$releasever - Extras
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
baseurl=http://vault.centos.org/centos/7/extras/$basearch/
gpgcheck=1
(참고: $releasever 대신 직접 7을 입력하는 것이 더 확실합니다.)
3) 설정 적용 및 확인
# 캐시 삭제 및 리스트 업데이트
yum clean all
yum makecache
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
# 패키지 설치 테스트 (EPEL 설치)
yum install -y epel-release
Kuryr CNI가 파드(Pod)의 네트워크 인터페이스를 물리 망과 연결하기 위해서는 워커 노드에 OVS(Open vSwitch) 설치가 필수입니다. 하지만 CentOS 7은 공식 저장소에서 최신 OVS 패키지를 제공하지 않으므로, 소스 코드를 통해 직접 RPM을 빌드하여 설치하는 과정을 가이드합니다.
빌드에 필요한 의존성 패키지들을 먼저 설치합니다.
yum install -y epel-release
yum -y install wget openssl-devel gcc make python-devel kernel-devel graphviz \
kernel-debug-devel autoconf automake rpm-build redhat-rpm-config libtool \
libcap-ng-devel groff checkpolicy selinux-policy-devel gcc-c++ python3-devel \
python3-sphinx unbound unbound-devel
안정적인 LTS 버전인 2.13.4를 기준으로 빌드를 진행합니다. (루트 계정 또는 일반 사용자 계정 모두 가능합니다.)
# 빌드 디렉토리 생성
mkdir -p ~/rpmbuild/SOURCES
# OVS 소스 다운로드 및 압축 해제
wget https://www.openvswitch.org/releases/openvswitch-2.13.4.tar.gz
cp openvswitch-2.13.4.tar.gz ~/rpmbuild/SOURCES/
tar -xvf openvswitch-2.13.4.tar.gz
소스 코드를 RPM 패키지로 변환한 후 로컬 설치를 진행합니다.
# RPM 빌드 수행
rpmbuild -bb --nodeps --nocheck openvswitch-2.13.4/rhel/openvswitch-fedora.spec
# 완성된 RPM 패키지 설치
yum localinstall /home/ovs/rpmbuild/RPMS/x86_64/openvswitch-2.13.4-1.el7.x86_64.rpm -y
설치 후 OVS 서비스를 활성화하고, 정상적으로 설치되었는지 확인합니다.
# 서비스 활성화 및 재시작
systemctl enable openvswitch.service
systemctl restart openvswitch.service
# OVS 버전 확인
ovs-vsctl -V
파드(Pod)는 기본적으로 호스트 네트워크를 직접 쓰지 않는 격리된 환경(NetNS)에 있습니다. 이 파드들이 외부(혹은 다른 노드의 파드)와 통신하려면 반드시 **가상 브리지(OVS)**를 거쳐야만 물리적인 세상으로 나갈 수 있습니다.
패킷이 이동하는 경로를 따라가 보면 OVS의 중요성을 실감하실 수 있습니다:
사실상 Kuryr 환경에서는 워커 노드의 메인 이더넷이 OVS에 의해 완전히 제어되는 구조가 됩니다.
| OpenStack Zed 수동 구축 - 11. kuryr-kubernetes(5) (0) | 2026.04.27 |
|---|---|
| OpenStack Zed 수동 구축 - 11. kuryr-kubernetes(4) (0) | 2026.04.21 |
| OpenStack Zed 수동 구축 - 11. kuryr-kubernetes(2) (0) | 2026.04.19 |
| OpenStack Zed 수동 구축 - 11. kuryr-kubernetes(1) (0) | 2026.04.19 |
| OpenStack Zed 수동 구축 - 10. Load Balancer 서비스 (Octavia) 사용해보기 (0) | 2026.04.16 |