์ด ๊ธ์ TLS ์ ๋ํ ๊ธฐ์ด์ ์ธ ๊ฐ๋ ์ด ํ์ํฉ๋๋ค.
์ต์ํ HTTPS ๊ฐ ์ด๋ป๊ฒ ๋์ํ๋ฉฐ, CA, CSR, tls.cert ๋ฑ๊ณผ ๊ฐ์ ๊ฒ์ด ๋ฌด์์ธ์ง ์์์ผ ํฉ๋๋ค.
๋ฏธ๋ PC ์์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ์ฌ ์ด๊ฒ์ ๊ฒ ํด๋ณด๊ณ ์๋๋ฐ, ๋ ํ๋ ๋ง์์ ๊ฑธ๋ฆฌ๋ ๊ฒ์ด ์์์ต๋๋ค.
๋ฐ๋ก ๋๋ฉ์ธ๊ณผ TLS ์ ๋๋ค!
๋๋ฉ์ธ ๊ฐ์ ๊ฒฝ์ฐ ๋งฅ /etc/host ์ ์ถ๊ฐํด์ ์ฌ์ฉํ๊ณ ์์๊ณ , TLS ๊ฐ ์ ์ฉ๋์ง ์๋ค๋ณด๋ ๋ ์ฃผ์ ์ํจ์ ๋ฌ๊ณ ์์์ฃ .
AWS ALB ๋ฅผ ์ฌ์ฉํ๋ฉด Route53 ๊ณผ ACM ์ ํตํด์ TLS ์ ์ฉํ๊ธฐ ์ฝ์ง๋ง, AWS ์์ด TLS ๋ฅผ ์ ์ฉํ๋ ค๋ฉด ๊ฒฐ๊ตญ TLS ๋ฅผ ๊ตฌ๋งคํด์ผ ํฉ๋๋ค. TLS ๋ ๋ณดํต ์ ๋ฃ์ธ๋ฐ, Let's Ecrypt ๋ ๋ฌด๋ฃ๋ก TLS ์ ์ ๊ณตํด์ฃผ๊ธฐ ๋๋ฌธ์ ์ด๋ฒ ๊ธ์์๋ ๋ก์ปฌ ํ๊ฒฝ์์ Let's Ecrypt ์ Istio ๋ฅผ ์ด์ฉํด์ ๋ฌด๋ฃ๋ก TLS ๋ฅผ ์ ์ฉํด๋ณด๊ณ ์ ํฉ๋๋ค.
๋ค์ด๊ฐ๊ธฐ ์์ ์ค๋นํ ๊ฒ์ด ์์ต๋๋ค. ๋ฐ๋ก TLS ๋ฅผ ์ ์ฉํ๊ณ ์ ํ๋ ๋๋ฉ์ธ์ ๋๋ค.
์ ๊ฐ์ ๊ฒฝ์ฐ CloudFlare ์์ ๋๋ฉ์ธ์ ๊ตฌ๋งคํ์๊ณ , ๋ค์๊ณผ ๊ฐ์ด DNS ๋ ์ฝ๋๋ฅผ ๊ตฌ์ฑํ์ต๋๋ค.
httpbin.kingbj0429.uk ์ ๊ฐ์ด ์๋ธ๋๋ฉ์ธ์ ์ฌ์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์์ผ๋์นด๋๋ฅผ ์ด์ฉํ ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
๊ทธ๋ผ ๋ณธ๊ฒฉ์ ์ผ๋ก ์์ํด๋ณด์ฃ !
๋ ์ธ ๋๋์ฝ๋~
๋จผ์ Cert Manager ์ ๋ํด ์กฐ๊ธ์ ์์๋ณด์ฃ !
์ฟ ๋ฒ๋คํฐ์ค ํ๊ฒฝ์๋ ๋ฌด์ํ ๋ง์ ํ๋๊ฐ ์์ต๋๋ค. ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํ๋๋ผ๋ฉด ๋น์ฐํ TLS ์ ํตํด ์์ ํ ํต์ ์ ํด์ฃผ์ด์ผ ํฉ๋๋ค. ํ๋์ ํ๋์ TLS ๋ฅผ ์ ์ฉํ๋ ๊ฑด ์ด์ง ๊ท์ฐฎ์๋ ์ด๋ ต์ง ์์์. TLS ๊ฐ ๋ง๋ฃ๊ฐ ๋๋, ํ๋ ํ๋์ ๋ํด์๋ง ๊ฐฑ์ ํด์ฃผ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ์์ด์.
ํ์ง๋ง ํ๋๊ฐ 100๊ฐ๋ผ๋ฉด ์ด๋จ๊น์? ๊ฐฑ์ ํ๋ ๊ฒ๋ง์ผ๋ก๋ ๋ฒ์จ ์ผ์ฃผ์ผ์ด ๋ค ๊ฐ ๊ฒ๋๋ค.
๊ทธ๋์ TLS ์ธ์ฆ์๋ฅผ ํธ๋ฆฌํ๊ฒ ๊ด๋ฆฌํ ์ ์๋๋ก ๋์์ฃผ๋ ๊ฒ์ด ๋ฐ๋ก Cert Manager ์ ๋๋ค.
Issuer ๋ฅผ ํตํด ์ธ์ ๋ ์ง Certificate ๋ฅผ ๋ง๋ค ์ ์๊ณ , ๊ฐฑ์ ๋ํ ์์์ ๋ค ํด์ค๋๋ค.
Cert Manager ๋ฅผ ์ฌ์ฉํด๋ ํ๋ ๊ฐ ํต์ ์ TLS ๋ฅผ ์ ์ฉํ๋ ๊ฑด ์๋นํ ๊ท์ฐฎ์ต๋๋ค.
๊ทธ๋์ Istio ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋ณดํต mTLS ๋ฅผ ํตํด ํ๋๊ฐ ํต์ ์ ์ํธํ ํด์ค๋๋ค.
mTLS ์ ๋ํด ๊ถ๊ธํ๋ค๋ฉด ์ฌ๊ธฐ ์ฐธ๊ณ !
๊ทผ๋ฐ ์ฌ๊ธฐ์ ๋ฌธ์ ๋ Issuer ๊ฐ์ ๊ฒฝ์ฐ ๋ณดํต SelfSigned ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ ๋ธ๋ผ์ฐ์ ์์ ์ ๊ทผํ๊ณ ์ ํ๋ ค๋ฉด ์ฃผ์ ์ํจ์ด ๋ ์.
์๋ ๋ฏฟ์ ์ ์๋ ca.cert ์ด๊ธฐ ๋๋ฌธ์ด์ฃ .
๊ทธ๋์ ์ฐ๋ฆฌ๋ SelfSigned ๊ฐ ์๋, Certificate Authority ๊ฐ ์ ๊ณตํด์ฃผ๋ ca.cert ๊ฐ ํ์ํ๊ณ , ca.cert ๋ฅผ ํตํด ๋ฐ๊ธ๋ฐ์ tls.cert ๊ฐ ํ์ํฉ๋๋ค.
Let's Ecrypt ๋ Certificate Authority ์ด๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์ ๊ฒ์ฆ ๋ฐ์ tls.cert ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฃผ์ ์ํจ์ ์์จ ์ ์์ต๋๋ค.
SelfSigned ๋ฅผ ํตํด ๊ฒ์ฆ ๋ฐ์ tls.cert ๋ ์ฃผ์ ์ํจ์ ์์จ ์ ์๋๋ฐ, ๋ฐ๋ก ๋ธ๋ผ์ฐ์ ์ SelfSigned ๋ ca.cert ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด์ฃ .
๋งฅ ๊ฐ์ ๊ฒฝ์ฐ ํค ์ฒด์ธ์ ์ถ๊ฐํด์ฃผ๋ฉด ๋ฉ๋๋ค.
ํ์ง๋ง ์ค์ฝํ๊ฐ ์์ ํ ๋ก์ปฌ์ด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ฌ๋์ด ๊ฒฐ๊ตญ ์ ๊ทผํ๋ ค๊ณ ํ๋ฉด ์ฃผ์ ์ํจ์ด ๋ฐ์ํ์ฃ .
์์ฝํด๋ณด์๋ฉด Let's Ecrypt CA ๊ฐ ๋ฐ๊ธํด์ค tls.cert ๋ฅผ ์ฌ์ฉํ๋ฉด ์์ ํ https ํต์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
Cert Manager ๋ ์ด๋ฌํ tls.cert ๋ฅผ ์ฌ์ฉ์ ๋์ ์์ฑํด์ฃผ๊ณ , ์๋ ๊ฐฑ์ ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํด์ค๋๋ค.
๊ทธ๋ผ ์ด์ ์ง์ง ์ค์ต์ผ๋ก ๋ค์ด๊ฐ๋ณด์ฃ !
๋ง๋ค๊ณ ์ ํ๋ ์ํคํ ์ฒ๋ ์๋์ ๊ฐ์์.
๋๋ฉ์ธ ์์ ๊ถ์ ํ์ธํ๊ธฐ ์ํด์ ACME(Automated Certificate Management Environment) ํ๋กํ ์ฝ์ ์ฌ์ฉํ๊ฒ ๋๋๋ฐ, ๊ณต์ ๋ฌธ์์์ ๊ฐ๊ฐ ๋๋ฉ์ธ์ ๋ง๋ ๊ฒ์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
์ ๋ CloudFlare ๋ฅผ ํตํด ๋๋ฉ์ธ์ ๊ตฌ๋งคํ๊ธฐ ๋๋ฌธ์ ๋๋ฉ์ธ ์์ ๊ถ์ ํ์ธํ๊ธฐ ์ํด์๋ cloudflare ์ api ๊ฐ ํ์ํฉ๋๋ค.
๋ค์ํ ACME ๋ฅผ ์ ๊ณตํ๋ ๋ณธ์ธ ํ๊ฒฝ์ ๋ง๊ฒ ์ ์ฉํ์๋ฉด ๋ ๊ฑฐ ๊ฐ์์.
๊ณต์ ๋ฌธ์์ ๋์์๋ ๋๋ก ์ ๋ API Token ์ ์์ฑํ๊ณ , Secret ๊ณผ Issuer ๋ฅผ ์์ฑํ์ต๋๋ค.
์ฌ๊ธฐ์ ์ ๋ง ์ค์ํ ํฌ์ธํธ๊ฐ ์์ต๋๋ค!!!
๊ณต์ ๋ฌธ์๋ฅผ ๋ณด๋ฉด Secret ๋ฆฌ์์ค์์ data ๊ฐ ์๋ stringData ๋ฅผ ์ฌ์ฉํ๊ณ ์๋๋ฐ data ๋ฅผ ์ฌ์ฉํด์ค์๋ค.
apiVersion: v1
data:
api-token: <base64 encoded api token>
kind: Secret
metadata:
name: cloudflare-api-token-secret
namespace: istio-system
type: Opaque
---
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: letsencrypt-dns01-prod-issuer
namespace: istio-system
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: kingbj0429@gmail.com
privateKeySecretRef:
name: letsencrypt-dns01-prod-key-pair
solvers:
- dns01:
cloudflare:
apiTokenSecretRef:
name: cloudflare-api-token-secret
key: api-token
ACME ํ๋กํ ์ฝ์ ๋๋ฉ์ธ์ ์์ ์๋ฅผ ํ์ธํ๊ณ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ ๊ฐ๋ฅ์ผ ํด์ฃผ๋ ํ๋กํ ์ฝ ์ ๋๋ค.
ํฌ๊ฒ ์ข ๋ฅ๋ DNS-01 ๊ณผ HTTP-01 ์ด ์์ฃ .
DNS-01 ์ DNS ๋ ์ฝ๋๋ฅผ ํตํด ์์ ๊ถ์ ํ์ธํ๊ณ ,
HTTP-01 ์ HTTP ์์ฒญ์ ํตํด ์์ ๊ถ์ ํ์ธํ๊ฒ ๋ฉ๋๋ค.
API Token ๊ถํ์ ๋ฌธ์ ๊ทธ๋๋ก ์งํํ์๋ฉด ๋๋๋ฐ ํน์๋ ํด์ ์ฒจ๋ถํฉ๋๋ค.
๊ทธ๋ผ ์ด์ ์์ฑํ Issuer ๋ฅผ ํตํด Certificate ๋ฅผ ์์ฑํด๋ณด์ฃ .
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: kingbj0429-uk-cert
namespace: istio-system # gateway ์ ์ ์ฉํ๊ธฐ ์ํด์ ๋ฐ๋์ istio ๋ฐฐํฌํ ๋ค์์คํ์ด์ค๋ก!!
spec:
isCA: false
secretName: kingbj0429-uk-key-pair
commonName: kingbj0429.uk
dnsNames:
- kingbj0429.uk
- httpbin.kingbj0429.uk
duration: 2160h # 90d
renewBefore: 360h # 15d
privateKey:
algorithm: RSA
encoding: PKCS1
size: 4096
issuerRef:
name: letsencrypt-dns01-prod-issuer
kind: Issuer
group: cert-manager.io
Istio Gateway ์ ์ ์ฉํ๋ ค๋ฉด ๋ฐ๋์ Istio ๋ฅผ ๋ฐฐํฌํ ๋ค์์คํ์ด์ค์ Certificate ๋ฅผ ์์ฑํด์ฃผ์ด์ผ ํฉ๋๋ค!!
๋ฐฐํฌํ๊ฒ ๋๋ฉด ์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก Cert Manager ๊ฐ ํด๋น ๋๋ฉ์ธ์ TLS ๋ฅผ ์ ์ฉํ๊ธฐ ์ํ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ ํด์ฃผ๋ ๋ฉ์ปค๋์ฆ์ด ๋์ํ๊ฒ ๋ฉ๋๋ค.
์๋์ ๊ฐ์ด ๋ค์ํ CRD ๊ฐ ์์ฑ๋ฉ๋๋ค.
$ k get orders.acme.cert-manager.io -n istio-system
#NAME STATE AGE
#kingbj0429-uk-cert-wr6b9-1120062372 pending 81s
$ k get challenges.acme.cert-manager.io -n istio-system
#NAME STATE DOMAIN AGE
#kingbj0429-uk-cert-wr6b9-1120062372-1523595522 pending httpbin.kingbj0429.uk 81s
#kingbj0429-uk-cert-wr6b9-1120062372-2843859647 pending kingbj0429.uk 81s
$ k get certificaterequests.cert-manager.io -n istio-system
#NAME APPROVED DENIED READY ISSUER REQUESTOR AGE
#kingbj0429-uk-cert-fzhkf True False letsencrypt-dns01-prod-issuer system:serviceaccount:key-manager:cert-manager 83s
$ k get certificate -n istio-system
#NAME READY SECRET AGE
#kingbj0429-uk-cert False kingbj0429-uk-key-pair 7m
Certificate ๋ฆฌ์์ค์์ .spec.dnsNames[] ์ ๋๋ฉ์ธ์ 2๊ฐ ๋ช ์ํ๊ธฐ ๋๋ฌธ์ challenge ๊ฐ 2๊ฐ์ธ๊ฑธ ํ์ธํ ์ ์์ต๋๋ค.
๊ฒฐ๊ตญ Certificate ๋ฅผ ๋ฐ๊ธฐ ์ํ ๊ณผ์ ์ด์ฃ .
ํ๋์ฉ ๊ฐ๋ตํ๊ฒ ์ค๋ช ํ๋ฉด,
- CertificateRequest: TLS ์ธ์ฆ์๋ฅผ ์์ฒญํ๊ณ , ์ด ์์ฒญ์ ํน์ Issuer ๋๋ ClusterIssuer์ ๊ด๋ จ์ด ์์
- Order: CertificateRequest๋ฅผ ๊ธฐ๋ฐ์ผ๋ก CA์๊ฒ ์ธ์ฆ์๋ฅผ ์์ฒญํ๋ ์ฃผ๋ฌธ์ ๋ํ๋
- Challenge: ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํ๊ธฐ ์ํด CA๊ฐ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํ ์ ์๋์ง ํ์ธํ๋ ๋ฐฉ๋ฒ์ ๋ํ๋
๋ฉ์ปค๋์ฆ ์์๋ฅผ ์๋์ ๊ฐ์ฃ .
(๋ง์ฝ ์ธ์ฆ์ ๋ผ์ดํ์ฌ์ดํด์ ๋ํด ์์ธํ ์๊ณ ์ถ๋ค๋ฉด ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ !)
- CertificateRequest ๋ฅผ ์์ฑํ๋ฉด, Cert Manager๋ ํด๋น ์์ฒญ์ ๋ํ Order๋ฅผ ์์ฑ
- Order๊ฐ ์์ฑ๋๋ฉด, Cert Manager๋ ํด๋น Order์ ๋ํ Challenge๋ฅผ ์์ฑ
- Challenge๊ฐ ์์ฑ๋๋ฉด, Cert Manager๋ ํด๋น Challenge๋ฅผ ์๋ฃํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. DNS-01 or HTTP-01 ๋ฐฉ์์ ACME ํ๋กํ ์ฝ์ ํตํด ๋๋ฉ์ธ ์์ ๊ถ์ ํ์ธ
- Challenge๊ฐ ์๋ฃ๋๋ฉด, Cert Manager๋ ๋๋ฉ์ธ ์์ ๋ฅผ ํ์ธํ๊ณ Order๋ฅผ ์๋ฃํ๋ฉฐ, ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ
ํ ์ค๋ก ์์ฝํ๋ฉด Issuer.yaml ์ ์์ฑํ acme ์ฝ๋๋ฅผ ํตํด ๋๋ฉ์ธ ์์ ๊ถ์ ํ์ธํ๊ณ , ์์ ๊ถ์ด ํ์ธ๋๋ฉด ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํด์ค๋๋ค.
ํ 2๋ถ ์ ๋๊ฐ ๋๋ฉด ์ด์ ์์ ๋ฆฌ์์ค๋ค์ด ๋ชจ๋ Valid ๋ True ๊ฐ ๋ฉ๋๋ค. ๊ทธ๋ผ ์ฑ๊ณต์ ์ผ๋ก Let's Encrypt ๋ฅผ ํตํด TLS ๋ฅผ ๋ฐ๊ธ ๋ฐ๊ฒ ๋ ๊ฒ์ด์ฃ .
$ k get issuers.cert-manager.io -n istio-system
#NAME READY AGE
#letsencrypt-dns01-prod-issuer True 14m
$ k get orders.acme.cert-manager.io -n istio-system
#NAME STATE AGE
#kingbj0429-uk-cert-wr6b9-1120062372 valid 81s
$ k get challenges.acme.cert-manager.io -n istio-system
#NAME STATE DOMAIN AGE
#kingbj0429-uk-cert-wr6b9-1120062372-1523595522 valid httpbin.kingbj0429.uk 81s
#kingbj0429-uk-cert-wr6b9-1120062372-2843859647 valid kingbj0429.uk 81s 81s
$ k get certificaterequests.cert-manager.io -n istio-system
#NAME APPROVED DENIED READY ISSUER REQUESTOR AGE
#kingbj0429-uk-cert-fzhkf True False letsencrypt-dns01-prod-issuer system:serviceaccount:key-manager:cert-manager 83s
$ k get certificate -n istio-system
#NAME READY SECRET AGE
#kingbj0429-uk-cert True kingbj0429-uk-key-pair 7m
challenges.acme.cert-manager.io ๋ฆฌ์์ค ๊ฐ์ ๊ฒฝ์ฐ๋ valid ์ํ๊ฐ ๋๋ฉด ์๋์ผ๋ก ์ญ์ ๋๊ธฐ ๋๋ฌธ์
-w ์ต์ ์ ์ฃผ์ด ์ํ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
ํ๋ฒ ๋ฐ๊ธ๋ฐ์ TLS ๋ฅผ ํ์ธํด๋ด ์๋ค. TLS ์ ์ํฌ๋ฆฟ์ผ๋ก ๋ฐฐํฌ๋ฉ๋๋ค.
$ k describe secrets -n istio-system kingbj0429-uk-key-pair
#Name: kingbj0429-uk-key-pair
#Namespace: istio-system
#Labels: controller.cert-manager.io/fao=true
#Annotations: cert-manager.io/alt-names: httpbin.kingbj0429.uk,kingbj0429.uk
# cert-manager.io/certificate-name: kingbj0429-uk-cert
# cert-manager.io/common-name: kingbj0429.uk
# cert-manager.io/ip-sans:
# cert-manager.io/issuer-group: cert-manager.io
# cert-manager.io/issuer-kind: Issuer
# cert-manager.io/issuer-name: letsencrypt-dns01-prod-issuer
# cert-manager.io/uri-sans:
#
#Type: kubernetes.io/tls
#
#Data
#====
#tls.key: 3243 bytes
#tls.crt: 5883 bytes
์ํฌ๋ฆฟ์ ์ํด ์์ฑ๋ tls.crt ๋ฅผ ๊ทธ๋ผ ์ด์ ๋์ฝ๋ฉ์ ํด๋ณด์ฃ .
echo "..." | base64 -d -o tls.cert
-----BEGIN CERTIFICATE-----
MIIF/DCCBOSgAwIBAgISBGYsMjD73J679u2U7ax5UXKVMA0GCSqGSIb3DQEBCwUA
...
8A/W4lHPy1UeCaHIs8j6QQwYp9JNXHle+yKP5obPb3f8GeCw2yAp91gffeovBFxn
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFFjCCAv6gAwIBAgIRAJErCErPDBinU/bWLiWnX1owDQYJKoZIhvcNAQELBQAw
...
nLRbwHOoq7hHwg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFYDCCBEigAwIBAgIQQAF3ITfU6UK47naqPGQKtzANBgkqhkiG9w0BAQsFADA/
...
Dfvp7OOGAN6dEOM4+qR9sdjoSYKEBpsr6GtPAQw4dy753ec5
-----END CERTIFICATE-----
๊ทธ๋ผ ์ด์ ๋์ฝ๋ฉ๋ ๊ฐ์ผ๋ก certificate ๋ด์ฉ์ ํ์ธํด๋ณด์ฃ .
$ openssl x509 -in ./tls.cert -text -noout
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
04:66:...
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = US, O = Let's Encrypt, CN = R3
Validity
Not Before: Sep 7 11:44:12 2023 GMT
Not After : Dec 6 11:44:11 2023 GMT
Subject: CN = kingbj0429.uk
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (4096 bit)
Modulus:
00:d5:96:ea:78:68:68:ae:88:47:a5:73:24:df:c4:
...
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Key Usage: critical
Digital Signature, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Server Authentication, TLS Web Client Authentication
X509v3 Basic Constraints: critical
CA:FALSE
X509v3 Subject Key Identifier:
BA:DD:...
X509v3 Authority Key Identifier:
14:2E:...
Authority Information Access:
OCSP - URI:http://r3.o.lencr.org
CA Issuers - URI:http://r3.i.lencr.org/
X509v3 Subject Alternative Name:
DNS:httpbin.kingbj0429.uk, DNS:kingbj0429.uk
X509v3 Certificate Policies:
Policy: 2.23.140.1.2.1
CT Precertificate SCTs:
Signed Certificate Timestamp:
Version : v1 (0x0)
Log ID : 7A:32:8C:54:D8:B7:2D:B6:20:EA:38:E0:52:1E:E9:84:
...
Timestamp : Sep 7 12:44:12.629 2023 GMT
Extensions: none
Signature : ecdsa-with-SHA256
30:44:02:20:4A:CB:24:7A:13:0D:A9:20:3C:80:68:9B:
...
Signed Certificate Timestamp:
Version : v1 (0x0)
Log ID : AD:F7:BE:FA:7C:FF:10:C8:8B:9D:3D:9C:1E:3E:18:6A:
...
Timestamp : Sep 7 12:44:12.676 2023 GMT
Extensions: none
Signature : ecdsa-with-SHA256
30:44:02:20:54:A6:7F:D0:4E:72:79:CA:01:EE:B2:FB:
...
Signature Algorithm: sha256WithRSAEncryption
Signature Value:
88:3b:98:ea:0a:bf:3c:5f:12:a1:a5:f2:8f:bc:36:cd:fe:9e:
...
๋ช๊ฐ์ง ํต์ฌ ์ ๋ณด๋ฅผ ํ์ธํด๋ณด๋ฉด,
O=Let's Encrypt ์ด๊ณ , Subject: CN = kingbj0429.uk ์ ๋๋ค. ๋ํ CA:FALSE ์ ๋๋ค.
๊ฐ๋ตํ๊ฒ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด ์๋์ ๊ฐ์ด ๋ ์ ์์๊ฑฐ ๊ฐ์์.
๋ง์ฝ ์ธ์ฆ์ ๋ผ์ดํ์ฌ์ดํด์ ๋ํด ์์ธํ ์๊ณ ์ถ๋ค๋ฉด ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ !
Let's Encrypt ๋ฅผ ํตํด ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ๋ฐ์์ผ๋ ์ด์ ์ค์ ๋ก ์ ์ฉํด๋ด ์๋ค.
httpbin ์ ๋ฐฐํฌํ๊ณ ์ ํฉ๋๋ค.
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: kingbj0429-test-gateway
spec:
selector:
istio: gateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "httpbin.kingbj0429.uk"
- "kingbj0429.uk"
- port:
number: 443
name: https
protocol: HTTPS
tls:
mode: SIMPLE
credentialName: kingbj0429-uk-key-pair
hosts:
- "httpbin.kingbj0429.uk"
- "kingbj0429.uk"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: kingbj0429-test-virtual-service
spec:
hosts:
- "httpbin.kingbj0429.uk"
- "kingbj0429.uk"
gateways:
- kingbj0429-test-gateway
http:
- match:
- uri:
prefix: /
route:
- destination:
host: httpbin
port:
number: 8000
---
apiVersion: v1
kind: Service
metadata:
name: httpbin
labels:
app: httpbin
service: httpbin
spec:
ports:
- name: http
port: 8000
targetPort: 80
selector:
app: httpbin
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: httpbin
spec:
replicas: 1
selector:
matchLabels:
app: httpbin
version: v1
template:
metadata:
labels:
app: httpbin
version: v1
spec:
serviceAccountName: httpbin
containers:
- image: docker.io/kong/httpbin
imagePullPolicy: IfNotPresent
name: httpbin
ports:
- containerPort: 80
์ฑ๊ณต์ ์ผ๋ก TLS ๊ฐ ์ ์ฉ์ด ๋์ต๋๋ค.
ํฌํธ๊ฐ 32003 ์ธ ์ด์ ๋ istio ingressgateway ์ https ํฌํธ๊ฐ ๋ ธ๋์ 32003 ๊ณผ ๋งตํ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ธ์ฆ์ ๋ทฐ์ด๋ฅผ ํ์ธํ์ ๋๋ ๋ฌธ์ ๋ ์์ด๋ณด์ ๋๋ค.
์๊ฐ๋ณด๋ค ๊ธ์ด ๋๋ฌด ๊ธธ์ด์ก๋ค์..
Cert Manager, TLS, ACME, Domain, DNS, Istio Gateway ๋ฑ ๋ค์ํ ๊ฐ๋ ๋ค์ด ์๋ค๋ ์๊ฐ๋ณด๋ค ์ด๋ ค์ ๋ ์ค์ต์ด์์ต๋๋ค.
๊ทธ๋๋ ๋ฌด์ฌํ ์ฑ๊ณต!
๋ค์ ๊ธ์์๋ AWS Route53 ์ ์ ์ฉํด๋ณผ ์์ ์ ๋๋ค.
๊ทธ๋ผ ์ค๋์ ์ฌ๊ธฐ๊น์ง!