ASM支持以圖形化的方式為域名添加證書,便于您使用HTTPS等協議訪問域名,提升服務網關的安全性。本文介紹如何為域名添加證書。
前提條件
已在ASM實例關聯的集群中部署應用,且ASM實例為企業版或旗艦版。
已部署入口網關。具體操作,請參見創建入口網關。
已為命名空間注入Sidecar。具體操作,請參見開啟Sidecar自動注入。
已獲取ASM網關地址。具體操作,請參見獲取ASM網關地址。
背景信息
本文以域名為aliyun.com的myexampleapp服務為例,為aliyun.com域名添加證書。添加成功后,您可以通過ASM網關使用HTTPS協議訪問域名為aliyun.com的myexampleapp服務。
操作步驟
創建示例服務myexampleapp。
使用以下內容,創建myexample-nginx.conf。
本示例服務基于Nginx實現,您需要為Nginx服務器創建配置文件。以域名aliyun.com的服務為例,以下內容定義請求根路徑直接返回字樣
Welcome to aliyun.com!
及狀態碼200
。events { } http { log_format main '$remote_addr - $remote_user [$time_local] $status ' '"$request" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log; server { listen 80; location / { return 200 'Welcome to aliyun.com!'; add_header Content-Type text/plain; } } }
執行以下命令,創建Nginx服務器的配置項。
kubectl create configmap myexample-nginx-configmap --from-file=nginx.conf=./myexample-nginx.conf
使用以下內容,創建myexampleapp.yaml。
apiVersion: v1 kind: Service metadata: name: myexampleapp labels: app: myexampleapp spec: ports: - port: 80 protocol: TCP selector: app: myexampleapp --- apiVersion: apps/v1 kind: Deployment metadata: name: myexampleapp spec: selector: matchLabels: app: myexampleapp replicas: 1 template: metadata: labels: app: myexampleapp spec: containers: - name: nginx image: nginx ports: - containerPort: 80 volumeMounts: - name: nginx-config mountPath: /etc/nginx readOnly: true volumes: - name: nginx-config configMap: name: myexample-nginx-configmap
執行以下命令,創建域名為aliyun.com的內部服務。
kubectl apply -f myexampleapp.yaml
在ASM網關中導入myexampleapp服務。
登錄ASM控制臺,在左側導航欄,選擇 。
在網格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇 。
在入口網關頁面,單擊目標網關的名稱。
在網關詳情頁面左側導航欄,單擊上游服務。
在上游服務頁面,單擊導入服務。
在導入服務頁面,選擇命名空間,選中myexampleapp服務,單擊圖標,然后單擊確認。
創建證書和私鑰。
在openssl中執行以下命令,創建根證書和私鑰。
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=myexample Inc./CN=aliyun.com' -keyout aliyun.root.key -out aliyun.root.crt
執行以下命令,為aliyun.com服務器生成證書和私鑰。
執行以下命令,創建證書aliyun.com.crt。
openssl x509 -req -days 365 -CA aliyun.root.crt -CAkey aliyun.root.key -set_serial 0 -in aliyun.com.csr -out aliyun.com.crt
執行以下命令,創建私鑰aliyun.com.key。
openssl req -out aliyun.com.csr -newkey rsa:2048 -nodes -keyout aliyun.com.key -subj "/CN=aliyun.com/O=myexample organization"
添加證書和私鑰掛載卷到ASM網關。
說明ASM實例從1.17版本起,支持使用證書管理頁面的證書。建議您盡快將證書遷移至證書管理,即直接在證書管理頁面新建一個同名證書,自動會覆蓋已創建的證書,無需手動刪除。關于升級實例的具體操作,請參見升級ASM實例。
證書管理頁面的證書會自動在數據面創建同名Secret。若已存在同名Secret,則會用新內容覆蓋該Secret。
ASM實例版本為1.17以下
登錄ASM控制臺,在左側導航欄,選擇 。
在網格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇 。
在入口網關頁面,單擊目標網關的名稱,然后在網關詳情頁面左側導航欄,單擊域名/證書。
在域名/證書頁面,單擊證書頁簽,然后單擊創建。
在新建證書頁面,輸入名稱,將
aliyun.com.crt
的內容復制到證書文本框,aliyun.com.key
的內容復制到私鑰文本框,然后單擊創建。
ASM實例版本為1.17及以上
綁定域名與證書。
登錄ASM控制臺,在左側導航欄,選擇 。
在網格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇 。
在入口網關頁面,單擊目標網關的名稱,然后在網關詳情頁面左側導航欄,單擊域名/證書。
在域名/證書頁面的域名頁簽,單擊創建。
在新建域名頁面,設置域名為*.aliyun.com,協議為HTTPS,輸入端口名稱和端口,選擇證書,選中是否使用TLS保護連接,然后單擊創建。
說明選中是否使用TLS保護連接,表示只有TLS請求才能訪問到域名。
執行以下命令,使用HTTPS協議訪問aliyun.com,驗證綁定域名與證書是否成功。
curl -k -H Host:www.aliyun.com --resolve www.aliyun.com:443:<ASM網關地址> https://www.aliyun.com
預期輸出:
Welcome to aliyun.com!
如果使用HTTPS協議訪問aliyun.com成功,表明綁定域名與證書成功。