备考ICA----Istio实验11—为多个主机配置TLS Istio Ingress Gateway实验
1. 部署应用
kubectl apply -f istio/samples/helloworld/helloworld.yaml -l service=helloworld
kubectl apply -f istio/samples/helloworld/helloworld.yaml -l version=v1
2. 证书准备
接上一个实验,准备第二个证书
openssl req -out example_certs_pana/pana.example.com.csr -newkey rsa:2048 \
-nodes -keyout example_certs_pana/pana.example.com.key \
-subj "/CN=pana.example.com/O=httpbin organization"
签发证书
openssl x509 -req -sha256 -days 365 -CA example_certs_root/example.com.crt \
-CAkey example_certs_root/example.com.key \
-set_serial 0 -in example_certs_pana/pana.example.com.csr \
-out example_certs_pana/pana.example.com.crt
将证书生成secret
因为后续也是使用istio/ingressgateway所以必须放着istio-system命名空间下
kubectl create secret -n istio-system tls pana-credential \
--key=example_certs_pana/pana.example.com.key \
--cert=example_certs_pana/pana.example.com.crt
确认secret被正确创建
kubectl get secrets -n istio-system
3. Istio配置
3.1 Gateway配置
这里新的hello服务和上个实验合用mygateway这个gateway对外提供访问,但各自使用各自的TLS证书.
tls-ingress/2-TLS-gateway.yaml
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: mygateway
spec:
selector:
istio: ingressgateway # use istio default ingress gateway
servers:
- port:
number: 443
name: httpbin
protocol: HTTPS
tls:
mode: SIMPLE
credentialName: httpbin-credential # must be the same as secret
hosts:
- httpbin.example.com
- port:
number: 443
name: pana
protocol: HTTPS
tls:
mode: SIMPLE
credentialName: pana-credential # must be the same as secret
hosts:
- pana.example.com
3.2 VirtualService配置
在vs中定义了监听mygateway的hosts是pana.example.com,匹配上uri:/hello后转发给svc helloworld的后端进行响应.
tls-ingress/2-TLS-VirtualService.yaml
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: pana
spec:
hosts:
- "pana.example.com"
gateways:
- mygateway
http:
- match:
- uri:
prefix: /hello
route:
- destination:
port:
number: 5000
host: helloworld
可以看到2个服务使用了同一个gw,但各自又有自己的Vs
4. 访问测试
4.1 pana.example.com
linux下
curl -v -HHost:pana.example.com --resolve "pana.example.com:443:192.168.126.220" \
--cacert example_certs_root/example.com.crt "https://pana.example.com:443/hello"
4.2 httpbin.example.com
上一个实验部署的httpbin.example.com
linux下
curl -v -HHost:httpbin.example.com --resolve \
"httpbin.example.com:443:192.168.126.220" \
--cacert example_certs_root/example.com.crt \
"https://httpbin.example.com:443/status/418"
至此为多个主机配置TLS Istio Ingress Gateway实验完成