《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.1.Elastic Stack 安装部署——3.4.1.8. ECK 安装(23) https://developer.aliyun.com/article/1231257
Istio IngressGateway HTTPS 加密
在前面创建 Istio 的 Elasticsearch 集群时我们选择不启用 Elasticsearch 自身的 HTTPS 加密,而交给 Istio 来管理 TLS 加密,现在我们在 Istio IngressGateway 上配置 HTTPS 加密。
创建用于服务签名的根证书和私钥:
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 \ -subj '/O=elasticsearch Inc./CN=elasticsearch.com' \ -keyout elasticsearch.com.key \ -out elasticsearch.com.crt
为 istio.elasticsearch.com 域名创建证书和私钥:
openssl req -out istio.elasticsearch.com.csr -newkey rsa:2048 -nodes \ -keyout istio.elasticsearch.com.key \ -subj "/CN=istio.elasticsearch.com/O=istio organization" openssl x509 -req -days 365 -CA elasticsearch.com.crt \ -CAkey elasticsearch.com.key -set_serial 0 \ -in istio.elasticsearch.com.csr -out istio.elasticsearch.com.crt
查看创建相关证书文件:
> ls -l total 20 -rw-r--r-- 1 chengzw chengzw 1212 Aug 30 10:52 elasticsearch.com.crt -rw------- 1 chengzw chengzw 1708 Aug 30 10:52 elasticsearch.com.key -rw-r--r-- 1 chengzw chengzw 1074 Aug 30 10:54 istio.elasticsearch.com.crt -rw-r--r-- 1 chengzw chengzw 948 Aug 30 10:53 istio.elasticsearch.com.csr -rw------- 1 chengzw chengzw 1704 Aug 30 10:53 istio.elasticsearch.com.key
为 Ingress Gateway 创建 Secret:
kubectl create -n istio-system secret tls istio-elasticsearch-credential \ --key=istio.elasticsearch.com.key \ --cert=istio.elasticsearch.com.crt
修改原先 Istio Gateway 的资源文件,将 credentialName 的值指定为 istio-elasticsearch-credential,这个与刚刚创建的 Secret 名称相同,TLS 模式的设置为 SIMPLE。
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: istio-elasticsearch-gateway-tls namespace: istio-demo spec: selector: istio: ingressgateway servers: - port: number: 9200 name: https protocol: HTTPS #改为 HTTPS 协议 hosts: - "istio.elasticsearch.com" #客户端访问的域名 tls: #TLS 加密 mode: SIMPLE credentialName: istio-elasticsearch-credential
定义 VirtualService 关联 Gateway。
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: istio-elasticsearch-gateway-virtualservice-tls namespace: istio-demo spec: hosts: - "istio.elasticsearch.com" #客户端访问的域名 gateways: - istio-elasticsearch-gateway-tls #gateway 的名称 http: - match: #写入操作的请求分发至 ingest 节点 - uri: regex: .*_doc.* #正则表达式匹配 url,例如创建文档 my-index-istio/doc/1 - uri: prefix: /_bulk #匹配 url 前缀,bulk 批量提交 route: - destination: host: istio-elasticsearch-es-ingest #kubernetes 集群中真正存在的 service - route: - destination: #其余操作的请求分发至 coordinating 节点 host: istio-elasticsearch-es-coordinating
删除原先的 Gateway 和 Virtualservice,创建新的 TLS 加密的 Gateway 和 Virtualservice。
kubectl delete -f gateway.yaml kubectl delete -f virtualservice.yaml kubectl apply -f gateway-tls.yaml kubectl apply -f virtualservice-tls.yaml
由于我们的 HTTPS 证书是自签证书,客户端通过 curl 命令访问 Elasticsearch 时需要加上
-k 参数,表示允许连接不受信任的 HTTPS 连接。
《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.1.Elastic Stack 安装部署——3.4.1.8. ECK 安装(25) https://developer.aliyun.com/article/1231255