前面和大家聊了使用Application Gateway Ingress Controller(以下简称:AGIC)以HTTP的形式将AKS群集内的业务系统发布到Internet以供用户使用。但是在实际的生产场景中,处于安全角度考量,其实客户很少将Web服务以HTTP的形式对外暴露,主要会使用HTTPS的形式对外发布应用。
我们知道HTTPS的服务非常安全,Google 现在对非HTTPS的服务默认是拒绝的,而且还能避免国内各种乱七八糟的劫持,所以以HTTPS的形式对外暴露服务真的时非常有必要的。在AKS中,因为AGIC是一个7层的负载均衡,所以支持以HTTPS的形式对外暴露AKS群集内的服务。当AGIC接受来自客户端的 HTTPS 请求时,客户端与AGIC之间的流量使用 TLS 进行加密。但是,AGIC可终止 TLS 加密,并将未加密的请求转发给应用,这样我们就在AGIC上实现了HTTPS卸载的动作。
先决条件
若想使用AGIC以HTTPS的形式对外发布AKS群集内的应用,需要满足如下先决条件:
- 一个启用了AGIC的AKS群集
- 一个配置解析到AGIC的公网域名
- 一个公网域名所对应的证书
部署应用程序
满足了上述先决条件以后我们就需要向AKS内部署一个实例的应用程序,本次我们以NGINX为例进行部署。
编写yaml文件,部署NGINX Pod和Service,具体如下所示:
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- image: nginx
name: nginx
ports:
- containerPort: 80
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
selector:
app: nginx
type: LoadBalancer
ports:
- protocol: TCP
port: 80
targetPort: 80
yaml编写好以后,使用 kubectl apply -f 进行部署:
部署完成以后可以使用kubectl get pod和kubectl get svc进行查看,可以看到资源已经部署成功:
准备证书
若要将服务以HTTPS的形式对外进行暴露,我们需要给所使用的域名配置相关证书,建议大家使用公网证书进行服务的发布。当前我已经准备了相应的证书:
证书准备好以后,我们需要将其部署到AKS群集内,证书在群集内是以secret的形式存在的,所以我们需要创建一个secret,具体方式如下:
kubectl create secret tls
创建好以后,使用kubectl get secret进行检查:
使用AGIC发布服务
准备好上述内容以后,我们就可以使用AGIC发布服务啦。
使用如下yaml文件发布服务,可以看到,我们是以tls的形式对外发布的服务并且指明了域名和证书相关信息。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx
annotations:
kubernetes.io/ingress.class: azure/application-gateway
spec:
tls:
- hosts:
- www.cloudmsp.club
secretName: www.cloudmsp.club
rules:
- host: www.cloudmsp.club
http:
paths:
- path: /
backend:
service:
name: nginx
port:
number: 80
pathType: Prefix
运行kubectl apply -f 部署Ingress:
部署完成以后,运行kubectl get ingress进行查看:
部署完以后,切换到Application Gateway,可以看到已经自动配置了相关的规则:
测试访问
都配置好以后,我们可以通过浏览器访问网站进行测试,可以看到,现在已经是使用HTTPS协议访问我们的nginx服务:
ok,到这里我们就给大家介绍了如何使用AGIC发布AKS内的业务应用,感兴趣的同学可以自己测试下哈!
标签:kubectl,nginx,AGIC,AKS,部署,HTTPS From: https://blog.51cto.com/wuyvzhang/6081005