You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在AKS中创建SSL证书并配置LoadBalancer Service以支持HTTPS请求

在AKS中为LoadBalancer Service配置HTTPS的两种方案

先明确核心概念:Kubernetes的LoadBalancer Service是**四层(TCP/UDP)**负载均衡,本身不处理HTTPS(HTTPS属于七层HTTP+TLS协议)。要让服务接收HTTPS请求,有两种实用方案,先理清你困惑的两个工具:

  • Ingress:Kubernetes的七层路由资源,用来定义域名、路径到后端Service的转发规则,由Ingress Controller(比如NGINX)实现这些规则,通常以LoadBalancer类型暴露,负责处理HTTPS终止。
  • cert-manager:Kubernetes插件,自动申请、续期SSL证书(比如Let's Encrypt免费证书),替代手动管理证书的繁琐流程。

方案一:后端Pod直接处理HTTPS(适合测试/简单场景)

这种方式是让运行应用的Pod自己加载SSL证书,Service直接转发443端口的TCP流量到Pod。

步骤1:生成SSL证书

可以用OpenSSL生成自签证书(仅测试用,生产建议用可信CA颁发的证书):

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=your-domain.com/O=your-org"

步骤2:将证书存入Kubernetes Secret

把证书和密钥放到Secret中,方便Pod挂载使用:

kubectl create secret tls my-app-tls --cert=tls.crt --key=tls.key

步骤3:修改Deployment挂载证书

更新你的应用Deployment,将Secret挂载到Pod的目录中,并配置应用使用证书(以Nginx应用为例):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        volumeMounts:
        - name: tls-secret
          mountPath: /etc/nginx/tls
          readOnly: true
        - name: nginx-config
          mountPath: /etc/nginx/conf.d
      volumes:
      - name: tls-secret
        secret:
          secretName: my-app-tls
      - name: nginx-config
        configMap:
          name: nginx-https-config

对应的Nginx配置ConfigMap(监听443端口并使用证书):

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-https-config
data:
  default.conf: |
    server {
      listen 443 ssl;
      server_name your-domain.com;

      ssl_certificate /etc/nginx/tls/tls.crt;
      ssl_certificate_key /etc/nginx/tls/tls.key;

      location / {
        root /usr/share/nginx/html;
        index index.html;
      }
    }

步骤4:更新LoadBalancer Service暴露443端口

修改你的Service manifest,将端口指向Pod的443端口:

apiVersion: v1
kind: Service
metadata:
  name: my-loadbalancer-service
spec:
  type: LoadBalancer
  ports:
  - port: 443
    targetPort: 443
    protocol: TCP
    name: https
  selector:
    app: my-app

方案二:用Ingress+cert-manager(生产环境推荐)

这种方式由Ingress Controller处理HTTPS终止,cert-manager自动管理证书,后端Service只需处理HTTP流量,更适合生产场景,也能节省LoadBalancer资源(多个服务共享一个Ingress的LoadBalancer IP)。

步骤1:安装NGINX Ingress Controller

用Helm安装官方NGINX Ingress Controller(会自动创建一个LoadBalancer类型的Service):

helm upgrade --install ingress-nginx ingress-nginx \
  --repo https://kubernetes.github.io/ingress-nginx \
  --namespace ingress-nginx \
  --create-namespace

步骤2:安装cert-manager

同样用Helm安装,同时安装CRD(cert-manager需要的自定义资源):

helm upgrade --install cert-manager cert-manager \
  --repo https://charts.jetstack.io \
  --namespace cert-manager \
  --create-namespace \
  --set installCRDs=true

步骤3:创建ClusterIssuer(申请证书的凭证)

创建一个ClusterIssuer,用来向Let's Encrypt申请可信证书:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: your-email@example.com # 接收证书过期通知的邮箱
    privateKeySecretRef:
      name: letsencrypt-prod
    solvers:
    - http01:
        ingress:
          class: nginx

应用这个配置:

kubectl apply -f cluster-issuer.yaml

步骤4:创建Ingress资源关联你的Service

创建Ingress规则,指定域名、证书,并转发流量到你的现有Service(建议将现有Service改为ClusterIP类型,避免浪费LoadBalancer资源):

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app-ingress
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod # 指定用上面的ClusterIssuer申请证书
spec:
  tls:
  - hosts:
    - your-domain.com # 你的域名,需要解析到Ingress Controller的LoadBalancer IP
    secretName: my-app-ingress-tls # cert-manager会自动创建这个Secret存储证书
  rules:
  - host: your-domain.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-existing-service # 你的后端Service名称
            port:
              number: 80 # 后端Service暴露的HTTP端口

应用配置:

kubectl apply -f ingress.yaml

步骤5:配置域名解析

获取Ingress Controller的LoadBalancer IP:

kubectl get svc -n ingress-nginx ingress-nginx-controller

将你的域名(your-domain.com)解析到这个IP,cert-manager会自动完成证书申请和续期,Ingress会处理HTTPS请求并转发到后端Service。


内容的提问来源于stack exchange,提问作者Be you

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 07:45:30