ssl 在aks中暴露受保护的tcp端点

kzmpq1sx  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(57)

需要公开支持AK中SSL终止的TCP端点。
Azure的负载均衡器是第四层均衡器,可以平衡TCP和UDP流量。因此,它不支持SSL卸载。Nginx ingress控制器不支持我们的需求,因为Kubernetes Ingress只支持HTTP和HTTPS服务,我们可以配置Nginx传递tcp,但它不会终止SSL。
我们的解决方案是创建一个sidecar容器,负责SSL终止并将所有内容转发到我们的应用程序,我们选择Envoy,因为它支持TLS终止与第4层通信。
然而,这个解决方案会影响系统性能。在AWS LB控制器用于SSL终止的设置中,性能测试需要40 ms才能完成,在没有Envoy的Azure设置中,它需要相同的时间,但是使用Envoy需要80 ms。我们正在寻找一个更好的解决方案,可以通过TCP暴露端点,并且也可以使用SSL进行安全保护,如果你知道任何更好的解决方案或有任何想法,我会很高兴听到它。
我们正在寻找一个更好的解决方案,可以通过tcp暴露端点,也可以通过ssl安全,如果你知道任何更好的解决方案或有任何想法,我会很高兴听到它。

unhi4e5o

unhi4e5o1#

若要使用Azure Application Gateway在AKS中公开具有SSL终止的TCP终结点,您需要执行以下步骤。
创建AKS群集

az aks create --name yourAKSCluster --resource-group yourResourceGroup --node-count 2 --enable-addons monitoring --generate-ssh-keys

字符串


的数据
使用CLI创建应用程序网关

az network application-gateway create --name YourApplicationGateway --location eastus --resource-group YourResourceGroup --capacity 2 --sku Standard_v2 --http-settings-cookie-based-affinity Disabled --frontend-port 80 --http-settings-port 80 --http-settings-protocol Http --public-ip-address YourPublicIP


或者您也可以通过门户网站

执行此操作
在您的AKS集群中安装AGIC。您可以使用Helm:

helm repo add ingress-azure https://appgwingress.blob.core.windows.net/ingress-azure-helm-package/
helm repo update
helm install ingress-azure/ingress-azure --name my-release --namespace ingress-basic --set appgw.name=MyApplicationGateway --set appgw.resourceGroup=MyResourceGroup --set appgw.subscriptionId=<subscription-id> --set appgw.shared=false --set armAuth.type=servicePrincipal --set armAuth.clientId=<client-id> --set armAuth.clientSecret=<client-secret> --set armAuth.tenantId=<tenant-id> --set kubernetes.watchNamespace=<namespace>



创建一个Ingress资源来公开你的应用。下面是一个简单的Ingress定义:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: redis
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
spec:
  tls:
    - hosts:
      - <redis.contoso.com>
      secretName: <redis-secret-name>
  rules:
  - host: <redis.contoso.com>
    http:
      paths:
      - backend:
          serviceName: frontend
          servicePort: 80


在AKS.

中部署应用程序
'For SSL termination at the Application Gateway:'* 您需要为证书创建一个Kubernetes secret,如下所示

kubectl create secret tls <guestbook-secret-name> --key <path-to-key> --cert <path-to-cert>

  • 为您的域获取SSL证书。
  • 使用您的SSL证书创建Kubernetes密钥。
  • 修改Ingress资源以包含TLS终止。

下面是如何修改SSL的Ingress:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: redis
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
spec:
  tls:
    - secretName: <redis-secret-name>
  rules:
  - http:
      paths:
      - backend:
          serviceName: frontend
          servicePort: 80


此过程将应用程序网关设置为AKS中的入口控制器,该入口控制器处理SSL终止。
参考文件:MS Doc

相关问题