istio服务网格生产环境ingress网关部署SSL实战


ingress gateway ssl

服务网格实战之SSL服务发布

在生产环境将Istio做完Ingress Gateway的时候,要将SSL部署的情况。

准备物件:
1.被各大厂认证签发过的、认证的域名私有证书、私钥,比如istio.sklinux.com。
2.基于云的k8s集群(生产环境)。
3.istio基础设施已经通过helm部署,并$(kubectl get svc -n istio-system|grep istio-ingressgateway)得到外部ip。
4.创建证书对象以及服务应用编排。
5.发布应用编排并使用https://istio.sklinux.com 进行测试。
大致步骤分为上面5部分,下面重点说下第4部分
首先创建证书对象:

kubectl create -n istio-system secret tls istio-ingressgateway-certs \
--key ssl/istio.sklinux.com/private.key \
--cert ssl/istio.sklinux.com/certificate.crt  

将在istio-system创建一个secret为istio-ingressgateway-certs的对象,分别是私钥和证书。
然后进行检查是否在ingress-gateway的容器中已经发现:

kubectl exec -it istio-ingressgateway-xxxxx-xxxxx -n istio-system -c istio-proxy -- ls -al /etc/istio/ingressgateway-certs/  
total 0
lrwxrwxrwx 1 root root 14 May 27 09:33 tls.crt -> ..data/tls.crt
lrwxrwxrwx 1 root root 14 May 27 09:33 tls.key -> ..data/tls.key

已经看见tls.crt和tls.key

下面进行服务编排:
主要编排路线是:
Gateway->VirtualService->DestinationRule->Service->Deployment
其中在Gateway中定义协议为HTTPS以及域名:

- port:  
number: 443  
name: https  
protocol: HTTPS  
tls:  
mode: SIMPLE  
serverCertificate: /etc/istio/ingressgateway-certs/tls.crt  
privateKey: /etc/istio/ingressgateway-certs/tls.key  
hosts:  
- istio.sklinux.com  

VirtualService 主要是做一些http的匹配规则,然后匹配规则流向何处,比如流向DestinationRule中的哪个版本。
DestinationRule中主要定义了有哪些目标路由和版本,这些目标具体由Service定义。版本的标签是由多个标签组成的deployment构成。

编排好后使用
istioctl kube-inject -f注入yaml,然后kubectl create -f 即可!