使用应用程序网关通过 HTTP 或 HTTPS 公开 AKS 服务
本文演示了如何使用 Kubernetes 入口资源通过 Azure 应用程序网关经 HTTP 或 HTTPS 公开示例 Azure Kubernetes 服务 (AKS) 服务。
先决条件
- 已安装的
ingress-azure
Helm 图表: - 一个 x509 证书及其私钥(如果要在此应用程序上使用 HTTPS)。
部署留言簿应用程序
guestbook
应用程序是一个规范的 Kubernetes 应用程序,由 Web UI 前端、后端和 Redis 数据库组成。
默认情况下,guestbook
在端口 80
上通过名为 frontend
的服务公开其应用程序。 在没有 Kubernetes 入口资源的情况下,该服务不能从 AKS 群集外部访问。 你使用此应用程序并设置入口资源,以便通过 HTTP 和 HTTPS 来访问此应用程序。
若要部署 guestbook
应用程序,请执行以下操作:
从此 GitHub 页面下载
guestbook-all-in-one.yaml
。通过运行以下命令将
guestbook-all-in-one.yaml
部署到 AKS 群集中:kubectl apply -f guestbook-all-in-one.yaml
通过 HTTP 公开服务
若要公开 guestbook
应用程序,请使用以下入口资源:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: guestbook
annotations:
kubernetes.io/ingress.class: azure/application-gateway
spec:
rules:
- http:
paths:
- backend:
serviceName: frontend
servicePort: 80
此入口会将 guestbook-all-in-one
部署的 frontend
服务公开为应用程序网关部署的默认后端。
请将以上入口资源另存为 ing-guestbook.yaml
:
通过运行以下命令来部署
ing-guestbook.yaml
:kubectl apply -f ing-guestbook.yaml
检查入口控制器的日志以了解部署状态。
guestbook
应用程序现在应该可用。 可以通过访问应用程序网关部署的公共地址来检查可用性。
通过 HTTPS 公开服务
没有指定的主机名
如果你未指定主机名,则 guestbook
服务在指向应用程序网关部署的所有主机名上可用。
在部署入口资源之前,请创建一个 Kubernetes 机密来托管证书和私钥:
kubectl create secret tls <guestbook-secret-name> --key <path-to-key> --cert <path-to-cert>
定义以下入口资源。 在
secretName
部分中,将<guestbook-secret-name>
替换为你的机密的名称。apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: guestbook annotations: kubernetes.io/ingress.class: azure/application-gateway spec: tls: - secretName: <guestbook-secret-name> rules: - http: paths: - backend: serviceName: frontend servicePort: 80
将入口资源存储在名为
ing-guestbook-tls.yaml
的文件中。通过运行以下命令来部署
ing-guestbook-tls.yaml
:kubectl apply -f ing-guestbook-tls.yaml
检查入口控制器的日志以了解部署状态。
现在,guestbook
应用程序在 HTTP 和 HTTPS 上均可用。
具有指定的主机名
你还可以在入口资源上指定主机名,以便将 TLS 配置和服务多路复用。 指定了主机名时,guestbook
服务仅在指定的主机上可用。
定义以下入口资源。 在
secretName
部分中,将<guestbook-secret-name>
替换为你的机密的名称。 在hosts
和host
部分中,将<guestbook.contoso.com>
替换为你的主机名。apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: guestbook annotations: kubernetes.io/ingress.class: azure/application-gateway spec: tls: - hosts: - <guestbook.contoso.com> secretName: <guestbook-secret-name> rules: - host: <guestbook.contoso.com> http: paths: - backend: serviceName: frontend servicePort: 80
通过运行以下命令来部署
ing-guestbook-tls-sni.yaml
:kubectl apply -f ing-guestbook-tls-sni.yaml
检查入口控制器的日志以了解部署状态。
现在,guestbook
应用程序在 HTTP 和 HTTPS 上均可用,但仅限于指定的主机。
与其他服务集成
使用以下入口资源添加路径并将这些路径重定向到其他服务:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: guestbook
annotations:
kubernetes.io/ingress.class: azure/application-gateway
spec:
rules:
- http:
paths:
- path: </other/*>
backend:
serviceName: <other-service>
servicePort: 80
- backend:
serviceName: frontend
servicePort: 80