日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

通過Ingress或AlbConfig為HTTPS監聽配置證書

當您選擇使用HTTPS協議的監聽時,您需要為監聽配置SSL/TLS證書以確保與客戶端的加密連接。本文介紹ALB Ingress支持的多種配置證書的方法。

前提條件

重要

由于缺乏可靠的CA認證,自簽名證書在瀏覽器和客戶端中默認不受信任,通常會導致客戶訪問時收到安全警告。本文中生成的自簽名證書僅作為示例,請勿在面向公眾的生產環境中使用。

證書管理方式對比

ALB Ingress支持三種配置證書的方式:自動發現證書、Secret證書和AlbConfig指定證書。三種配置方式的區別如下。

說明

ALB Ingress不影響長鏈接。

對比項

自動發現證書

Secret證書

AlbConfig指定證書

關聯資源

Ingress

Ingress

AlbConfig

存儲方式

阿里云數字證書中心

集群內的Secret資源

阿里云數字證書中心

適用場景

適用于已在阿里云數字證書中心已購買證書或上傳證書,并希望在Ingress級別進行證書管理的場景。

適用于集群內部管理的證書,例如使用cert-manager類的管理工具時,ALB實例證書會隨著證書Secret的更新而更新。

適用于已在阿里云數字證書中心已購買證書或上傳證書,并希望在ALB實例級別進行證書管理的場景。

優先級(僅供參考)

跨命名空間使用

支持

不支持,僅支持在Secret資源所處的命名空間使用。

支持

更新證書方式

在數字證書中心上傳新證書或續費證書后,更新Ingress資源。

更新Ingress關聯的Secret資源。

在數字證書中心上傳新證書或續費證書后,更新AlbConfig資源。

證書管理方式兼容性說明

在ALB Ingress中,如果您同時使用了多種證書配置方式時,證書的管理方式和兼容性如下所示。

證書配置

說明

在Ingress資源中同時定義了自動發現證書和Secret證書

  • 如果自動發現證書和Secret證書屬于同一域名,那么Secret證書具有更高的優先級。

  • 如果自動發現證書和Secret證書屬于不同的域名,那么ALB Ingress Controller會為每個域名分別選擇相應的證書。

在Ingress資源中同時定義了自動發現證書和AlbConfig指定證書,并且它們關聯的Listener相同

  • 如果在AlbConfig中指定了證書,則同監聽下不會使用自動發現證書。

  • 如果未在AlbConfig中指定證書,則會嘗試執行自動發現證書流程。

在Ingress資源中同時定義了Secret證書和在AlbConfig指定證書

AlbConfig指定證書和Secret證書是可以完全兼容的,并且可以同時使用。

創建前置資源

您需要Deployment、Service、AlbConfig、IngressClass、Ingress這5種資源才能使ALB Ingress工作,您可以使用以下的示例快速創建這5種資源。

  1. 創建https-quickstart.yaml文件,并將以下內容拷貝到該文件中。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: https-deploy
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: https-deploy
      template:
        metadata:
          labels:
            app: https-deploy
        spec:
          containers:
            - image: registry.cn-hangzhou.aliyuncs.com/alb-sample/cafe:v1
              imagePullPolicy: IfNotPresent
              name: https-deploy
              ports:
                - containerPort: 8080
                  protocol: TCP
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: https-svc
      namespace: default
    spec:
      ports:
        - name: port1
          port: 443
          protocol: TCP
          targetPort: 8080
      selector:
        app: https-deploy
      sessionAffinity: None
      type: ClusterIP
    ---
    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: https-ingressclass
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: alb-demo # 修改為您的AlbConfig資源的名稱
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: https-ingress
      namespace: default
    spec:
      ingressClassName: https-ingressclass
      rules:
      - host: demo.alb.ingress.top # demo.alb.ingress.top可以替換為您的域名
        http:
          paths:
          - backend:
              service:
                name: https-svc
                port:
                  number: 443
            path: /
            pathType: Prefix
  2. 執行以下命令創建服務。

    kubectl apply -f https-quickstart.yaml

(可選)生成自簽名證書

如果您還未獲取證書,您可以執行以下命令,通過OpenSSL創建自簽名證書。

openssl genrsa -out albtop-key.pem 4096
openssl req -subj "/CN=demo.alb.ingress.top" -sha256  -new -key albtop-key.pem -out albtop.csr  # demo.alb.ingress.top可以替換為您的域名
echo subjectAltName = DNS:demo.alb.ingress.top > extfile.cnf  # demo.alb.ingress.top可以替換為您的域名
openssl x509 -req -days 3650 -sha256 -in albtop.csr -signkey albtop-key.pem -out albtop-cert.pem -extfile extfile.cnf
說明

命令中的demo.alb.ingress.top是自簽名證書所關聯的域名。如果您擁有域名,請您進行替換。如果您未擁有域名,可以不進行替換,不影響本文后續步驟。

使用自動發現證書

說明

同一個ALB支持的擴展證書上限為25個,包含同域名的證書總數不能超過該閾值。

  1. 將自簽名證書上傳至阿里云數字證書中心。具體操作,請參見上傳和共享SSL證書

  2. 更新Ingress配置。

    1. 執行以下命令更新Ingress配置。

      kubectl edit ingress https-ingress
    2. 在https-quickstart.yaml的Ingress部分中添加tls字段,填入證書關聯的域名并保存退出。

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: https-ingress
        namespace: default
      spec:
        ingressClassName: alb
        rules:
        - host: demo.alb.ingress.top # demo.alb.ingress.top可以替換為您的域名
          http:
            #...
        tls:
        - hosts:
          - demo.alb.ingress.top # 需要和“host“字段中的域名保持一致,同時是證書關聯的域名
  3. 執行以下命令,驗證證書是否配置成功。

    curl https://demo.alb.ingress.top/tea

    預期輸出:

    {"hello":"tee"}

    返回以上結果,說明證書配置成功。

使用Secret證書

以下以自簽名證書為例,介紹如何配置Secret證書。

說明

同一證書支持創建不同的Secret,ALB也支持關聯多個證書,但同一ALB支持的擴展證書上限為25個。

  1. 執行以下命令,使用OpenSSL創建自簽名證書。

    openssl genrsa -out albtop-key.pem 4096
    openssl req -subj "/CN=demo.alb.ingress.top" -sha256  -new -key albtop-key.pem -out albtop.csr
    echo subjectAltName = DNS:demo.alb.ingress.top > extfile.cnf
    openssl x509 -req -days 3650 -sha256 -in albtop.csr -signkey albtop-key.pem -out albtop-cert.pem -extfile extfile.cnf
  2. Base64編碼步驟1中的albtop-key.pem和albtop-cert.pem。

    echo -n `cat albtop-key.pem` | base64
    echo -n `cat albtop-cert.pem`  | base64
  3. 創建Secret。

    1. 創建secret.yaml,代碼示例如下。

      apiVersion: v1
      kind: Secret
      metadata:
        name: secret-tls
      type: kubernetes.io/tls
      data:
        # the data is abbreviated in this example
        tls.crt: |
          {base64 albtop-cert.pem} # Base64編碼后的albtop-cert.pem。
        tls.key: |
          {base64 albtop-key.pem}  # Base64編碼后的albtop-key.pem。
    2. 執行以下命令,創建Secret。

      kubectl apply -f secret.yaml
  4. 創建Ingress、Service和應用。

    1. 創建demo.yaml,代碼示例如下。

      在Ingress的YAML中添加證書對應的域名。

      tls:
        - hosts:
          - demo.alb.ingress.top
          secretName: secret-tls

      展開查看示例代碼

      apiVersion: v1
      kind: Service
      metadata:
        name: demo-service-https
        namespace: default
      spec:
        ports:
          - name: port1
            port: 443
            protocol: TCP
            targetPort: 8080
        selector:
          app: demo-cafe
        sessionAffinity: None
        type: ClusterIP
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: demo-cafe
        namespace: default
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: demo-cafe
        template:
          metadata:
            labels:
              app: demo-cafe
          spec:
            containers:
              - image: registry.cn-hangzhou.aliyuncs.com/alb-sample/cafe:v1
                imagePullPolicy: IfNotPresent
                name: demo-cafe
                ports:
                  - containerPort: 8080
                    protocol: TCP
      ---
      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: demo-https
        namespace: default
      spec:
        ingressClassName: alb
        rules:
        - host: demo.alb.ingress.top
          http:
            paths:
            - backend:
                service:
                  name: demo-service-https
                  port:
                    number: 443
              path: /
              pathType: Prefix
        tls:
        - hosts:
          - demo.alb.ingress.top
          secretName: secret-tls
    2. 執行以下命令,創建Ingress、Service和應用。

      kubectl apply -f demo.yaml
  5. 執行以下命令,驗證證書是否配置成功。

    curl https://demo.alb.ingress.top/tea

    預期輸出:

    {"hello":"tee"}

    返回以上結果,說明證書配置成功。

使用AlbConfig指定證書

以下以自簽名證書為例,介紹如何使用AlbConfig指定證書。

說明

如果監聽配置了證書ID,那么相同監聽下的域名不會再使用Secret證書和自動發現證書。

  1. 執行以下命令,通過OpenSSL創建自簽名證書。

    openssl genrsa -out albtop-key.pem 4096
    openssl req -subj "/CN=demo.alb.ingress.top" -sha256  -new -key albtop-key.pem -out albtop.csr
    echo subjectAltName = DNS:demo.alb.ingress.top > extfile.cnf
    openssl x509 -req -days 3650 -sha256 -in albtop.csr -signkey albtop-key.pem -out albtop-cert.pem -extfile extfile.cnf
  2. 上傳自簽名證書至阿里云數字證書中心。具體操作,請參見上傳和共享SSL證書

  3. 獲取證書ID。

    1. 登錄數字證書管理服務控制臺

    2. 在控制臺左側導航欄,單擊SSL 證書

    3. SSL證書頁面,單擊上傳證書頁簽,在目標證書操作列下選擇圖標 > 詳情

      證書詳情面板中獲取證書ID。

  4. 關聯證書至AlbConfig。

    未創建AlbConfig場景

    1. 創建albconfig.yaml,代碼示例如下。

      apiVersion: alibabacloud.com/v1
      kind: AlbConfig
      metadata:
        name: alb-demo
      spec:
        config:
          #...
        listeners:
        - caEnabled: false
          certificates:
          - CertificateId: 756****-cn-hangzhou # 證書ID
            IsDefault: true
          port: 443
          protocol: HTTPS
        #...

      參數

      說明

      caEnabled

      是否開啟TLS握手過程中有效證書的身份驗證。本示例配置false,表示不需要客戶端的身份驗證。

      CertificateId

      證書ID。本示例配置為756****-cn-hangzhouCertificateId格式示例及說明如下:

      • 中國地域:756****-cn-hangzhou-cn-hangzhou為固定內容,不受地域影響,配置時您只需替換756****即可。

      • 海外地域:756****-ap-southeast-1-ap-southeast-1為固定內容,不受地域影響,配置時您只需替換756****即可。

      IsDefault

      是否為默認證書。本文配置為true,表示是默認證書。

      protocol

      支持監聽的協議類型。本文配置為HTTPS,表示支持HTTPS協議的監聽。

    2. 執行以下命令,創建AlbConfig。

      kubectl apply -f albconfig.yaml

    已創建AlbConfig場景

    通過kubectl edit命令進行增量更新。

    1. 執行以下命令,查看AlbConfig名稱。

      kubectl -n kube-system get AlbConfig

      預期輸出:

      NAME AGE
      alb-demo 87m
    2. 執行以下命令,更新對應AlbConfig。

      kubectl -n kube-system edit AlbConfig alb-demo
        #...
        spec:
          config:
            #...
          listeners:
          - caEnabled: false
            certificates:
            - CertificateId: 756****-cn-hangzhou # 證書ID
              IsDefault: true
            port: 443
            protocol: HTTPS
            #...

    更多關于更新AlbConfig的信息,請參見更新AlbConfig

  5. 創建Ingress、Service和應用。

    1. 創建demo.yaml,代碼示例如下

      說明

      本例Ingress中的tls字段只作為掛載到443監聽標識,并不是自動發現證書的配置。

      展開查看示例代碼

      apiVersion: v1
      kind: Service
      metadata:
        name: demo-service-https
        namespace: default
      spec:
        ports:
          - name: port1
            port: 443
            protocol: TCP
            targetPort: 8080
        selector:
          app: demo-cafe
        sessionAffinity: None
        type: ClusterIP
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: demo-cafe
        namespace: default
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: demo-cafe
        template:
          metadata:
            labels:
              app: demo-cafe
          spec:
            containers:
              - image: registry.cn-hangzhou.aliyuncs.com/alb-sample/cafe:v1
                imagePullPolicy: IfNotPresent
                name: demo-cafe
                ports:
                  - containerPort: 8080
                    protocol: TCP
      ---
      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: demo-https
        namespace: default
      spec:
        ingressClassName: alb
        rules:
        - host: demo.alb.ingress.top
          http:
            paths:
            - backend:
                service:
                  name: demo-service-https
                  port:
                    number: 443
              path: /
              pathType: Prefix
        tls:
        - hosts:
          - demo.alb.ingress.top
    2. 執行以下命令,創建Ingress、Service和應用。

      kubectl apply -f demo.yaml
  6. 執行以下命令,驗證證書是否配置成功。

    curl https://demo.alb.ingress.top/tea

    預期輸出:

    {"hello":"tee"}

(可選)釋放資源

執行以下命令,您可以釋放在本文中創建的資源。

kubectl delete deployment https-deploy
kubectl delete service https-svc
kubectl delete ingressclass https-ingressclass
kubectl delete ingress https-ingress
rm https-quickstart.yaml