안녕하세요. 오늘은 Azure에서 제공하는 서비스 중 하나인, DNS private resolver란 무엇인지, 그리고 또 어떻게 사용하는지에 대해서 설명해보려고 합니다.

 

* 본 내용은 Azure의 기본적인 리소스 구성을 알고 있음을 가정하여 작성하였습니다.

 

1. What is DNS?

신규 서비스인 DNS private Resolver를 설명하기에 앞서 DNS란 무엇일까요?

 

도메인 네임 시스템(Domain Name System, DNS)은 호스트의 도메인 이름을 호스트의 네트워크 주소로 바꾸거나 그 반대의 변환을 수행할 수 있도록 하기 위해 개발되었다고 하네요.

 

결국 서비스를 위한 호스트의 네트워크 주소를 우리가 흔히 URL에서 볼 수 있는, 도메인 주소로 바꾸어 주는 역할을 합니다. 예시로 네이버 홈페이지의 URL 주소를 통해 IP를 확인해 볼 수 있어요.

nslookup을 진행하여 확인한 www.naver.com의 서비스 IP

 

이러한 DNS는 외부적으로도 사용하지만, 내부적으로 사용하는 DNS들도 있어요.

아무래도 IP로만 통신을 하다보면, 해당 IP로는 직접적인 서버의 용도라던지, 서비스 이름을 예측하기 힘든 경우가 많아요.. 그래서 private DNS를 구성하는 경우가 많죠! 기업마다 DNS Server는 대부분 구성이 되어 있습니다. 

 

기업의 규모가 큰 회사는 CLOUD를 사용하게 되면, 대부분 Hybrid Cloud(Onpremise와 Cloud 서비스를 모두 사용하며 연동하여 사용하는 클라우드 개념)를 구성하게 되는 경우가 많아요.

Hybrid Cloud를 구성하기 위해 VPN Gateway로 network 연동을 한 예시

 



Cloud서비스와 Onpremise 서비스간 연동은 데이터를 주고 받을 수 있는 네트워크의 연동이 핵심이죠. Express Route나 VPN과 같은 서비스를 생성하여 연동하게 됩니다. 이 때 Azure에서 특정 Paas 서비스를 사용하게 되고 외부의 노출을 막고 내부 통신만 가능하도록 Private Link를 PaaS서비스에 연동하여 서비스만의 고유의 Private IP와 Pirvate DNS를 할당받게됩니다.

 

물론 "IP"로의 통신이 가능해요. 하지만, 대부분의 기업에서는 DNS를 활용하여 쿼리문을 작성하는 것이 익숙하겠죠?

 

여기서 Azure와 On Premise간 이름 풀이를 위한 DNS Forwarder가 있습니다.

 

DNS 질의 워크플로우

 

해당 그림은 On Premise에서 Azure에 있는 SQL Database에 DNS 질의를 날렸을 때, 발생하는 워크플로우입니다.

 

On Premise의 Client VM에서 DNS 질의를 할 때 바라보는 대상은 Interal DNS 서버에요.

 

해당 Internal DNS는 조건부 전달에 등록되어 있는 database.windows.net을 Azure VM에 구성한 DNS Forwarder로 전달하죠. 해당 전달을 받은 Azure VM은 Azure DNS Nameserver로 이름 풀이를 하게 되고, 그 값을 받아 다시 Internal DNS 서버로 전달, Client VM이 SQL DB와 통신할 수 있게 되죠. 자세한 설명은 다음 링크를 참고하시면 됩니다. 

https://learn.microsoft.com/en-us/azure/architecture/example-scenario/networking/azure-dns-private-resolver

해당 설정을 위해서는 Virtual Machine을 생성하고, DNS Forwarder 구성을 직접 해주어야 했어요. 바로 IaaS의 영역인 거죠. 특정 기능을 구현하기 위해서는 서버 담당자, DNS 담당자의 역할이 필요했어요. 

 

결국 Azure에서는 DNS Forwarder를 대체 시킬 수 있는 PaaS 서비스를 제공하기 시작했습니다.

본론으로 들어가 볼까요?

2. What is DNS private Resolver Service?

DNS private resolver란, VM 기반 DNS 서버(앞서 설명한 DNS Forwarder)를 배포하지 않고 온-프레미스 환경에서 Azure DNS 프라이빗 영역을 쿼리하거나 그 반대로 쿼리할 수 있는 새로운 서비스입니다.

Hybrid Cloud를 위해 거의 필수적으로 필요한 서비스로, 직접 구성을 하다보니, Azure에서는 그 니즈를 캐치해서 PaaS서비스로 만들어 제공하고 있다고 보이네요.

 

GA는 2022년 10월 경 되었구요!

https://azure.microsoft.com/en-us/blog/announcing-azure-dns-private-resolver-general-availability/

 

Announcing Azure DNS Private Resolver general availability

We are excited to share that Azure DNS Private Resolver is now in general availability. We offer two types of Azure DNS Zones—private and public—for hosting your private DNS and public DNS records.

azure.microsoft.com

다음 아키텍처를 통해 새로운 PaaS인 DNS Private Resolver의 역할을 볼까요? 

DNS Private Resolver를 구성시 생성되는 Inbound Endpoint VIP가 DNS Forwarder VM에서의 VM의 IP의 역할을 해요. On-Premise에서는 특정 DNS들을 검색시, 해당 VIP로 DNS forward를 진행하게 되고 해당 VM에서는 Azure의 DNS Zone으로 Lookup하여 얻은 값을 전달해주게 되죠.

 




3. DNS private resolver POC 

해당 서비스를 테스트 해보기 위해 azure용 vnet, on premise용 vnet을 구성, 서로 peering을 맺었어요.

(On Premise처럼 동일한 구성을 위해 ER 구축을 하고싶으나,,, 현실적으로 불가능 하므로 peering = er 통신으로 가정하고 테스트 했어요 ㅎㅎ)

 

테스트는 private endpoint가 달린 storage account에 대해서, private dns로 nslookup이 가능한지, 테스트 해보았어요. 해당 테스트는 DNS Private Resolver의 Inbound Endpoint를 사용하는 테스트입니다.

 

전제 조건 : Spoke 내에 존재하는 VM NIC의 DNS Server를 1,2번은 DNS Forwarder로, 3번은 DNS Private Resolver의 Inbound Endpoint VIP로 각각 테스트 진행해 보았어요.

 

1. DNS Forwarder로 구성한 VM을 DNS Server로 지정, DNS Server 서비스를 START 한 뒤  테스트(성공)

 

DNS Forwarder로 구성한 VM은 DNS 질의가 오는 것에 대해 Azure Provided DNS인 168.63.129.16으로 전달하게 되고, 다음과 같이 Blob의 Private DNS를 얻을 수 있음을 확인할 수 있어요.

2. DNS Server를 기본 설정 그대로 두고 테스트(실패)

이번에는 DNS Server 설정을 VNET의 default 그대로 두고 테스트를 해 보았어요. vnet 두개가 peering이 되어 있지만 blob의 private dns zone에 nslookup 명령을 하는 VM이 존재하는 Vnet은 LINK가 되어 있지 않아요. 따라서 Private DNS를 lookup하지 못하고 Storage Account의 public 주소로 검색이 되게 되죠.

 

3. DNS Private Resolver로 DNS Server를 지정하여 테스트(성공)

1번과 똑같은 상황에서, DNS Server를 DNS Private Resolver의 Inbound Endpoint VIP로 넣었어요. DNS Private Resolver는 Azure Provided DNS에 질의하여 Private Blob을 조회가능하게 한 것이죠.

 

4. How much DNS private resolver Price? 

비용은 어느정도 나올지 측정해 보았습니다. DNS Forwarder 역할을 수행하는 Inbound Endpoint는 20만원의 가격이 소요됨을 확인할 수 있어요.

5. Conclusion

On-Premise와 통신하는 Cloud 환경을 만들면서, DNS Forwarder 구성은 DNS 검색을 위해서는 필수 불가결한 사항이였어요. 그러한 상황을 Azure는 인지하고, DNS Private Resolver 서비스를 출시함으로서 고객들의 니즈를 잘 파악하고 해당 서비스를 출시한 것으로 보여지네요. 

신규 서비스 DNS Private Resolver 소개는 여기까지 입니다. 다음 서비스 소개에서 만나요~!





Powershell 기반으로, 키고 끔을 통해 비용을 절감시킬 수 있다.

 

1. Application Gateway

$AppGw = Get-AzApplicationGateway -Name Test -ResourceGroupName Appgwtest
Stop-AzApplicationGateway -ApplicationGateway $AppGw

2. Azure Firewall

STOP

# Stop an existing firewall

$azfw = Get-AzFirewall -Name "FW Name" -ResourceGroupName "RG Name"
$azfw.Deallocate()
Set-AzFirewall -AzureFirewall $azfw

START

 

- forced tunneling 설정이 안되어 있을때

# Start the firewall

$azfw = Get-AzFirewall -Name "FW Name" -ResourceGroupName "RG Name"
$vnet = Get-AzVirtualNetwork -ResourceGroupName "RG Name" -Name "VNet Name"
$publicip1 = Get-AzPublicIpAddress -Name "Public IP1 Name" -ResourceGroupName "RG Name"
$publicip2 = Get-AzPublicIpAddress -Name "Public IP2 Name" -ResourceGroupName "RG Name"
$azfw.Allocate($vnet,@($publicip1,$publicip2))

Set-AzFirewall -AzureFirewall $azfw

- forced tunneling 설정이 되어있을 때

# Start the firewall

$azfw = Get-AzFirewall -Name "FW Name" -ResourceGroupName "RG Name"
$vnet = Get-AzVirtualNetwork -ResourceGroupName "RG Name" -Name "VNet Name"
$pip= Get-AzPublicIpAddress -ResourceGroupName "RG Name" -Name "azfwpublicip"
$mgmtPip2 = Get-AzPublicIpAddress -ResourceGroupName "RG Name" -Name "mgmtpip"
$azfw.Allocate($vnet, $pip, $mgmtPip2)
$azfw | Set-AzFirewall

 

- secured virtual hub architecture 일 때

# Start the firewall

$virtualhub = get-azvirtualhub -ResourceGroupName "RG name of vHUB" -name "vHUB name"
$azfw = Get-AzFirewall -Name "FW Name" -ResourceGroupName "Azfw RG Name"
$azfw.Allocate($virtualhub.Id)
$azfw | Set-AzFirewall

'Azure > Azure CLI' 카테고리의 다른 글

[Azure CLI] 1. az vm 대량 생성하는 법  (0) 2022.12.02

bash + Azure CLI 조합

 

csv와 bash의 while문을 활용하여, 여러대의 vm을 배포하는 스크립트이다.

 

 

 

* Azure Compute Gallery의 이미지를 사용한다고 가정

* Vnet은 배포되어있다고 가정

 

vm_ResourceGroup vm_type vm_name vm_subnet vm_sku
test-rg VirtualMachine test-01 test-subnet Standard_B1S
test-rg VirtualMachine test-02 test-subnet Standard_B1S
test-rg VirtualMachine test-03 test-subnet Standard_B1S
test-rg VirtualMachine test-04 test-subnet Standard_B1S
test-rg VirtualMachine test-05 test-subnet Standard_B1S
test-rg VirtualMachine test-06 test-subnet Standard_B1S
test-rg VirtualMachine test-07 test-subnet Standard_B1S
test-rg VirtualMachine test-08 test-subnet Standard_B1S
test-rg VirtualMachine test-09 test-subnet Standard_B1S
#!/bin/bash

subscription = 'koo-prod'
subnet_prefix = '/subscriptions/54e0cba4-d24d-4eb3-86d9-ea8cf67e4693/resourceGroups/prd-seas-gasp-common-rg/providers/Microsoft.Network/virtualNetworks/prd-seas-gasp-vnet/subnets/'

declare -i count
count=1
filename="vm.csv"
{ 
read
while IFS=, read -r vm_ResourceGroup vm_name vm_subnet vm_sku vm_image null;
do

    echo "I got:$vm_ResourceGroup | $vm_name | $vm_subnet | $vm_sku | $vm_image"

    az account set -s $subscription

    ###네트워크 인터페이스의 파라미터 값으로 해당 값을 넣어 nic 생성
    accnet=$(az vm list-skus --location koreacentral --all true --resource-type virtualMachines --size ${vm_sku} --query '[].{acceleratedNetworkingEnabled: capabilities[?name==`AcceleratedNetworkingEnabled`].value | [0]}' -o tsv)
    accnet="$(tr [A-Z] [a-z] <<< "$accnet")"


    #동적 IP 할당
    az network nic create --name ${vm_name}"-VMNic" \
                          --resource-group $vm_ResourceGroup \
                          --subnet ${subnet_prefix}"VM-subnet"
                          #--accelerated-networking ${accnet}
                          #--output none
    


    if [ "$accnet" == "true" ];
    then
    echo "${vm_sku}임으로, nic의 가속화된 네트워킹이 enabled 되었습니다"
    else
    echo "${vm_sku}이므로, nic의 가속화된 네트워킹이 disabled 입니다."
    fi

    privateip=`az network nic ip-config list --resource-group $vm_ResourceGroup --nic-name ${vm_name}"-VMNic" | grep "privateIpAddress" | grep -v Version | cut -d '"' -f 4`
    echo "$privateip 로 nic가 생성되었습니다."
    #필요한 IP만 뽑기위해 grep, cut	

    ###3번 static IP로 설정             
    #정적 IP 설정
    az network nic ip-config update \
                            --name ipconfig1 \
                            --resource-group $vm_ResourceGroup \
                            --nic-name ${vm_name}"-VMNic" \
                            --private-ip-address ${privateip}
	
    echo "$privateip 가 static으로 변경되었습니다."

    az vm create --name $vm_name \
                 --resource-group $vm_ResourceGroup \
                 --image /subscriptions/54e0cba4-d24d-4eb3-86d9-ea8cf67e4693/resourceGroups/test-rg/providers/Microsoft.Compute/galleries/gallerykoo/images/web-test/versions/0.1.3 \
                 --generate-ssh-keys \
                 --nics ${vm_name}"-VMNic" \
                 --os-disk-name ${vm_name}"-OSdisk" \
                 --size $vm_sku \
                 --zone 1 \
                 --no-wait

    echo " $count VMs created, this time $vm_name is deployed, ip is $privateip"
    count+=1
done
} < $filename

'Azure > Azure CLI' 카테고리의 다른 글

[Azure CLI] 2.사용하지 않는 리소스 중단  (1) 2022.12.02

처음 일 시작 하고 연말정산이란걸 해봤는데

조사좀 해보니.. 재밌네요 ㅋㅋ

내 총 급여에서 근로소득 공제라는게 빠지네.
이 근로소득 공제는 다 똑같은 비율로 받는 듯(받은 총 급여에 따라 다르겠지만..)

이건 내가 받은 총 급여의 퍼센티지로 나눠짐. 링크 참고.

https://www.koreatax.org/tax/taxpayers/work/turn16.htm

4500만원이라고 가정하면, 750만원 + (4000-1500)*0.15 = 1200만원

그럼 나는 근로소득 금액이 3300만원으로 시작.

3300만원에서 일단 소득공제로 이 금액을 다운시킴..

이 다운이 중요한 이유는, 세금을 부과하는 범위때문인듯..

0~1200만원은 6%
1200~ 4600은 15%
4600~8800은 24% 등등..

보험료랑 국민연금으로 낸 세금은 소득공제에서 빠져나가는것 같고.. 미혼이고 부양가족이 없는 나에게 얻을 수 있는 혜택은 청약정도?

보험료랑 국민연금 대충 150,150 빠지면 나는 3천만원이 내 과세표준.. 여기서 뭐 기부금이나 청약으로 더 낮출수 있네..

과세표준 = 3천만원이라 치고

나는 산출세액을 계산해보면

1200만원의 6프로, 1800만원의 15프로니까..

72만원 + 260만원 = 332만원

==================================

소득공제를 해야하는 이유 : 저 산출세액의 크기를 줄여줌. 아무래도 급여가 커질수록, 세금을 부과하는 퍼센트가 큰 영역으로 내 돈이 들어가면.. 그만큼 세금을 많이 떼는군..

==================================

자 이제 332만원이 그럼 내 뭐다,,? 산출 세액이다..!

해당 산출세액으로 이제 세액공제 들을 차감하면 되는데..

자녀 세액공제 이게 좀 커보이더라고. 근데 나는 미혼이라 제외..

그럼 내가 받을 수 있는건?

그 항상 형들이 말하는 연금저축 400이랑 isa 700인가? 그거로 세액공제 가능하고..

기부금, 월세공제, 전세대출 이자공제, 정도가 있네..

이걸 공제하고나면.. 남는게 결정세액..

결정세액이 뭐 한 300만원이 나왔어.(세액공제 32만원뿐이 안했다면..)

이 금액을 기납세액(지난1년간 낸 세금인데, 소득세랑 지방소득세만 해당하는듯,, 농특세는 뭐 해당없는듯?)
에서 빼야해.

300만원(결정세액) - 200만원(기납세액) = 100만원

이러면 나는 100만원을 뱉어내야하는거네..
그래서 사람들이 결정세액을 0원으로 만들라고 한거였군..

저는 월세, 기부금으로 세액공제가 크게 되서 -60만원 되서 그거 돌려받을 느낌..!

==================================

요약정리하자면..

1. 소득공제를 통해 내 과세표준 금액을 줄여라
2. 세액공제를 통해 내 결정세액을 0으로 수렴하게 하라

3. 13월의 월급을 받자.

끝..!

안녕하세요 보나에요!

 

오늘은 최근에 취득한 자격증인 CKA 자격증 후기를 남겨볼려고 합니다

 

CKA자격증은 Certified Kubernetes Administrator의 약자로, 

쿠버네티스를 하는 사람이라면 한번쯤 시도해볼만한(?) 자격증이라고 생각해요.

저는 100점만점에 82점을 받았는데요! 어떻게하면 시험에 붙을 수 있을지, 자세한 후기 남겨보려고해요.

 

1. 시험 유형

시험 유형은 홈페이지(www.cncf.io/certification/cka/)에서 확인 가능하듯이, 다음과 같아요

각 유형별로 어느정도의 비중이 잡혀있는지 확인할 수 있어요

 

 

2. 시험 공부 방법 

시험 공부 방법은, 우선 kubectl 명령어에 익숙하셔야 되요. 

CKA 시험은 100% Hands-On 시험이기때문에, Linux shell 명령어라든지, K8s 명령어인 kubectl이라든지.. 

명령어 사용이 잦기때문에 익숙해지는게 필수라고 생각합니다. 명령어에 익숙해지면서,

k8s공부도 하실거면 저는 udemy 강의를 완전 추천해요!

 

 

이 강의가 CKA공부를 위해서는 독보적인 강의라고 할 수 있어요..

단점이라면 한글자막이 없다는점, 영어자막 또한 수많은 오타가 있다는점..

하지만 장점이라면! 역시! mock exam이라는 모의 CKA 시험이 존재하구요,

챕터마다 practice test 환경을 제공해 주어서 직접 hands-on 으로 연습할 수 있어요!

 

다시말해, 연습,연습,연습을 통하여 kubernetes 명령어들에 익숙해지고, 왜 이게 개발되었나 생각하다보면

깨닫는게 하나 둘 씩 생길거에요... 저도 아직 다 깨닫진 못했지만 말이에요..(우리 모두 화이팅해봐요)

 

3. kubectl config use-context [cluster명]에 익숙해지자

CKA시험은 하나의 cluster에서 시험이 치뤄지는것이 아니에요. 다음과같이 6개의 cluster가 존재해요

docs.linuxfoundation.org/tc-docs/certification/tips-cka-and-ckad 해당 url에 접속하셔서 보시면 알 수 있듯이,

시험자는 매 문제에 해당하는 cluster에서 시험문제를 풀어야해요. 이게 쉬울수도 있을 것이라 생각하는데....

1번문제 풀고 2번문제 풀고.. 마지막문제까지 다풀었다! 라고 생각하면 쉬울거에요.

그런데 1번 막히고, 2번 풀고, 3번막히고.. 다시 1번으로 돌아오고..

 

이런 과정을 거치다 보면, 내가 context를 이상한데서 풀어버리면..... 그냥 그 시험은 끝이라고 생각이 됩니다....

 

그러기 때문에!! context를 어디서 작업했나! sudo -i 로 root권한으로 작성했었나! 이런거는 문제를 풀때마다 

다시 base node로 가는 것이 중요하다는 점!!! 꼭꼭!! 명심하셔야합니다!!!!

 

4. kubenetes documentation 활용하기

CKA 시험은 다행히, 오픈북 형식이라 1개의 참고문서를 활용할 수 있어요.

99.9%의 후기를 보면, kubernetes.io/docs/home/

 

Kubernetes Documentation

Kubernetes is an open source container orchestration engine for automating deployment, scaling, and management of containerized applications. The open source project is hosted by the Cloud Native Computing Foundation.

kubernetes.io

다음 홈페이지를 참고하라고하는데요.. 저도 마찬가지로 해당 홈페이지에서 검색해가며 문제를 풀었습니다..

yaml 파일을 처음부터 만드는 바보는 없으시리라 생각해요.. 

 

yaml파일을 kubectl run nginx --image=nignx --dry-run-client -o yaml > q1.yaml 처럼 yaml로 빼신 후 사용하시거나,

docs에서 관련된 유형을 찾으셔서 복사해서 붙여넣어 yaml파일을 완성하세요.. 

 

5. kubectl explain [object명] --recursive 활용하자..

해당 명령어로 저는 두세문제는 맞추었다고 생각해요..

yaml 파일은 hierarchy가 탭으로 구분이되요..

예를 들자면, 

apiVersion: batch/v1
kind: Job
metadata:
  name: hello
spec:
  template:
    # This is the pod template
    spec:
      containers:
      - name: hello
        image: busybox
        command: ['sh', '-c', 'echo "Hello, Kubernetes!" && sleep 3600']
      restartPolicy: OnFailure
    # The pod template ends here

다음과 같은 yaml 파일을 보시면, 계층구조가 확실히 보이죠?

그런데 문제는,, spec 밑에 containers 밑에 command를 넣어야하나?(물론 이건 당연한 경우지만)

라는 의문점이 들면서, 계층구조가 헷갈릴 경우가 무조건!! 생겨요.. 

이게 어떤걸 써야하는지, path인지 paths인지, hostpath인지 hostPath인지 소문자 대문자에 따라서도

오류가 날 수 있꾸요.. 그럴경우에 요긴하게 사용할 수 있는 명령어니까!!

사용해보세요!!

 

kubectl explain development --recursive 예시

이상으로 후기에 대해 적어보았습니다.. 마지막으로는 자격증을 보여드리며 마치고싶네요!!

나 CKA 자격증 땄다!!!! ㅎㅎㅎ

 

 

+ Recent posts