개발자 블로그를 위한 일곱걸음

개발자 블로그를 위한 일곱걸음

홈서버를 운영하는 사람들은 홈서버에 접근하기 위해 ip를 외우거나 도메인을 구입해서 해당 ip를 연결해두어야 합니다. 서비스를 운영하기 위해 필수적으로 필요한 요소이지만 테스트를 위한 기능을 알려드리겠습니다. 대부분의 공유기에는 DDNS라는 기능을 통해 이러한 불편한 점을 해결해줍니다. 이를 통해 도메인과 인증서에 대해 한걸음 다가보겠습니다.

개발자 블로그를 위한 여섯걸음
이제 인그레스를 통해 외부로 서비스가 나갈 수 있지만, 아직 뭔가 불편하죠. 왼쪽 상단을 보면 보이는 Not secure | https:// 라는 주소창이 상당히 위험한 사이트처럼 보이게합니다. 이때 쿠버네티스에서는 ‘자가 서명 인증서’를 발급받아 해당 도메인이 TLS 인증서를 통해 클라이언트와 서버 간 통신을 안전하게 연결할 수 있습니다. 개발자 블로그를 위한 다섯걸음이제 metalLB가 설치되어 쿠버네티스의

🚫
원할한 설명을 위해 ip 주소를 공개하고 있고, 보안설정을 진행했습니다.
ip 주소는 참고만 하시고, 해킹 및 공격을 할 경우 민형사 상의 책임이 발생 할 수 있음을 알려드립니다.

현재 블로그를 운영하는 서버도 iptime 공유기를 통해 구축되어 있고, iptime의DDNS 기능을 통해, 이를 통해 손쉽게 외부에서 홈서버로 접근할 수 있습니다.

iptime 공유기의 DDNS 설정

하지만 iptime의 DDNS는 한계점이 있기 때문에 이에 대한 실패와 대체재를 공유하려합니다.

개발자 블로그를 위한 여섯걸음
이제 인그레스를 통해 외부로 서비스가 나갈 수 있지만, 아직 뭔가 불편하죠. 왼쪽 상단을 보면 보이는 Not secure | https:// 라는 주소창이 상당히 위험한 사이트처럼 보이게합니다. 이때 쿠버네티스에서는 ‘자가 서명 인증서’를 발급받아 해당 도메인이 TLS 인증서를 통해 클라이언트와 서버 간 통신을 안전하게 연결할 수 있습니다. poormThoughts, stories and ideas.poorm cert-manager 란?

DDNS란?

동적인 IP 주소를 사용하는 장치나 네트워크에 대해 고정된 도메인 이름을 매핑해주는 서비스입니다. 일반적으로 인터넷 서비스 제공업체(ISP)는 사용자의 IP 주소를 주기적으로 변경하는데, DDNS는 이러한 동적 IP 주소 변경에도 도메인 이름을 통해 항상 장치에 접근할 수 있도록 도와줍니다.

인터넷은 보통 ip가 변경되므로 장치(공유기)에서 변경된 ip를 바라보는 도메인주소 제공 서비스 라고 요약할 수 있습니다.

외부에 나와있는 상태에서 ip가 변경된다면 DDNS가 없다면, 내 홈서버의 ip를 확인 할 수 없기 때문에 NAS, CCTV, IOT 등 같은 장치들을 이용할 수 없게 됩니다. 따라서 굳이 사용하지 않더라도 외우기 쉬운 형태로 공유기 DDNS를 설정해두는 것이 좋습니다.

테스트 준비

이후 테스트를 위해 몇가지 설정을 진행하겠습니다.
먼저 ddns 네임스페이스를 생성해 이곳에서만 테스트를 진행하고 삭제할 예정입니다.

kubectl create namespace ddns
kubectl get namespace | grep ddns

그리고 helm을 통해 간단한 nginx sample을 서비스를 시작합니다.

helm upgrade --install nginx-test-1 bitnami/nginx -n ddns --set service.type=ClusterIP
kubectl get all -n ddns

--set service.type=ClusterIP 을 지정하는 이유는 metalLB가 설치된 이후로는 서비스가 자동으로 로드밸런스에 '직접' 연결되기 때문에 ingress를 활용하기 위해선 수동으로 CLusterIP로 만들어지게 합니다.


iptime DDNS 란?

EFM, ipTIME 아이피타임
이지메시, 이지메쉬, 메시와이파이, 기가 와이파이, 유무선 및 무선 인터넷 공유기, 와이파이 증폭기 및 확장기, 기업 및 가정용 나스, NAS STORAGE 등 제품소개와 펌웨어 다운로드 고객지원 제공

iptime 공식 DDNS 설정 방법 문서

ipTIME에서 지원하는 DDNS 기능도 큰 문제 없이 사용할 수 있습니다. 설정방법은 공식 사이트의 문서를 참고해주시고, 그러나 ipTIME의 DDNS을 서비스 또는 테스트로도 사용하기 어렵게 하는 문제점이 있기 때문에 실제 테스트를 하면 살펴보도록 하겠습니다.

iptime DDNS 테스트

vi ddns-nginx-ingress-iptime.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress-iptime
  namespace: ddns
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  ingressClassName: nginx
  tls:
    - hosts:
        - poorm.iptime.org
      secretName: nginx-tls-iptime
  rules:
    - host: poorm.iptime.org
      http:
        paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: nginx-test-1
              port:
                number: 80
kubectl apply -f ddns-nginx-ingress-iptime.yaml
kubectl get cert -n ddns

iptime의 DDNS을 통해서는 TLS인증서 발급이 되지 않습니다.

https://poorm.iptime.org https로 들어갈 순 있지만 인증을 위한 fake 인증서만 존재해서 오히려 더 위험해 보입니다.

이는 DDNS 제공자인 ipTIME의 DDNS로 너무 많은 인증서 발급이 시도하고 실패했기 때문에 인증기관에서 인증서 발급을 차단하고 있기 때문입니다.


Duckdns 란?

Duck DNS
Duck DNS free dynamic DNS hosted on Amazon VPC

이름부터 D(Duck)DNS같아 보이는 Duckdns는 첫 화면의 문구부터

free dynamic DNS hosted on AWS

무료 동적 DNS 호스트를 AWS를 통해 제공해주고 있습니다.

사용법은 다음과 같습니다.

  1. 간단하게 가입을 합니다.
  2. 중앙의 sub domain 으로 빈칸에 원하는 서브도메인 (예시로 hyobin을 입력) 입력합니다.
  3. add domain 버튼을 누릅니다.
  4. 하단에서 해당 도메인을 설정할 수 있도록 테이블이 생성됩니다.
  5. current ip에 서버의 ip를 입력합니다.

Duckdns 테스트

vi ddns-nginx-ingress-duckdns.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress-duckdns
  namespace: ddns
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  ingressClassName: nginx
  tls:
    - hosts:
        - hyobin.duckdns.org
      secretName: nginx-tls-duckdns
  rules:
    - host: hyobin.duckdns.org
      http:
        paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: nginx-test-1
              port:
                number: 80
kubectl apply -f ddns-nginx-ingress-duckdns.yaml
kubectl get cert -n ddns

ipTIME과는 다르게 duckdns는 정상적으로 인증서가 생성되었습니다.

Welcome to nginx!

이제 https://hyobin.duckdns.org 로 접속하면, 사용자-인터넷-공유기-포트포워딩-서버-metallb-ingress-인증서-어플리케이션 순으로 전달되어 서비스 중인 어플리케이션으로 접속하게 됩니다.


공유기의 DDNS통신사에서 할당하는 IP가 변경될 수 있으니 지정해서 사용
Duckdns의 DDNS는 어플리케이션을 SSL을 활용해 서비스할 때 테스트로 사용

테스트 과정 중 몇번의 시도를 거치며 도메인과 ssl설정을 위해 작업을 진행 할 수 있기 때문에 연습을 위한 과정으로 포스팅을 진행했습니다. 해당 포스팅을 이해하셨다면 굳이 적용하지 않고 다음 포스팅으로 이동해 도메인을 구하는 방법을 확인해 보시길 바랍니다.

실제로 어플리케이션을 서비스한다면 도메인을 직접 구매하는 것이 가장 좋습니다.

Read more

푸름이세요? 아니요 구름인데요

푸름이세요? 아니요 구름인데요

클라우드 컴퓨팅(Cloud Computing) 이란? 클라우드 컴퓨팅은 IT 인프라를 손쉽게 관리할 수 있도록 도와주며, 확장성과 유연성을 제공하는 기술입니다. 물리적인 서버를 직접 구매하지 않아도 되며, 필요한 만큼의 자원을 사용하고 비용을 절감할 수 있다는 점에서 많은 기업과 개인이 활용하고 있습니다. 클라우드 서비스의 유형을 크게 세 가지 모델로 나눌 수 있습니다. 인프라스트럭처 서비스(

By hyobin
빔슬람(Vimslam)이 되보자

빔슬람(Vimslam)이 되보자

Vim이란? Vim은 서버에서 작업하는 사람들 사이에서 유용한 텍스트 편집기입니다. UNIX 시스템에서 표준 편집기였던 VI의 개선판으로 Vi Improved의 약자입니다. 그래서 대부분의 유닉스기반(리눅스를 포함한) 운영체재에 설치되어있고 작동합니다. Vim은 다음과 같은 특징을 갖고 있습니다. * 모드 기반 편집 Vim은 입력 모드와 명령 모드로 구분됩니다. 사용자는 명령 모드에서 편집, 삭제, 검색 등을 빠르게 할

By hyobin