나같은 경우는 이미 SSL 인증서를 한국정보인증? 에서 발급받아서 cert 및 .pem 파일들이 모두 있는 케이스였다.
찾아보니 뭐 다양하다. SSL 인증서가 기존에 없어서 cert-manager라는 걸 활용해서 하는 경우도 있고.. 그리고 istio 미사용에 그냥 kubernetes ingress를 활용하는 경우도 있고..
그래서 내가 정리하려고 한다.
나는 한 클러스터에서 운용해야하는 인증서가 하나가 아니라서 하기 두 링크를 참고했다.
로컬에 있는 인증서 서버로 옮기기.
다양한 방식이 있겠지만 나는 주로 scp를 이용한다.
scp -r {fileNameA} {userName}@{serverHost}:{yourDirectory}/{fileNameA}
인증서 기반으로 secret 만들기. 나는 하나만 할게 아니라서 istio-ingressgateway-certs가 아니라 중간에 서비스명을 끼워넣은걸로 만들었다.
kubectl create secret tls istio-ingressgateway-{serviceName}-certs --key {yourKeyFileName}.pem --cert {yourCertFileName}.pem
openssl rsa -in <encrypted_private.key> -out <decrypted_private.key>
kubectl get secret
을 통해 진짜 생겼는지 함 확인해봅시다.[{
"op": "add",
"path": "/spec/template/spec/containers/0/volumeMounts/0",
"value": {
"mountPath": "/etc/istio/ingressgateway-{serviceName}-certs",
"name": "ingressgateway-{serviceName}-certs",
"readOnly": true
}
},
{
"op": "add",
"path": "/spec/template/spec/volumes/0",
"value": {
"name": "ingressgateway-{serviceName}-certs",
"secret": {
"secretName": "istio-ingressgateway-{serviceName}-certs",
"optional": true
}
}
}]
그리고 얘를 데려다가 주소창에 복붙해서 일렬로 만들고..
kubectl patch --type=json deploy istio-ingressgateway -p '{여기}'
여기에 넣어준다.
오호. 그러면 patch 끝! 이라고 나온다.
spec:
servers:
- hosts:
- {Domain1}
- {Domain2}
- {Domain3}
port:
name: http
number: 80
protocol: HTTP
이제 우리는 여기에 https라는 애도 gw에서 받아주도록 바꿔줄거다.
spec:
servers:
- hosts:
- {Domain1}
- {Domain2}
- {Domain3}
port:
name: http
number: 80
protocol: HTTP
- hosts:
- {Domain2}
port:
name: https
number: 443
protocol: HTTPS
tls:
mode: SIMPLE
privateKey: /etc/istio/ingressgateway-{serviceName}-certs/tls.key
serverCertificate: /etc/istio/ingressgateway-{serviceName}-certs/tls.crt
spec:
hosts:
- {Domain1}
gateways:
- {Gateway}
http: <- 요기 !
- route:
- destination:
host: {Host}
subset: {subset}
weight: 100
http
부분을 참고해보면HTTP routes will be applied to
platform service ports named ‘http-’/‘http2-’/‘grpc-*’,
gateway ports with protocol HTTP/HTTP2/GRPC/ TLS-terminated-HTTPS
and service entry ports using HTTP/HTTP2/GRPC protocols.
TLS-terminated-HTTPS 도 http에 설정된 라우팅 룰을 타므로 걱정 안해도 된다 =)https://istio.io/v1.3/docs/tasks/traffic-management/ingress/secure-ingress-mount/
https://support.f5.com/csp/article/K94561586