成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Kubernetes中Nginx Ingress + Cert-Manager實現自動Https

云計算 云原生
在Kubernetes集群中使用 HTTPS 協議,需要一個證書管理器、一個證書自動簽發服務,主要通過 Ingress 來發布 HTTPS 服務。

在Kubernetes集群中使用 HTTPS 協議,需要一個證書管理器、一個證書自動簽發服務,主要通過 Ingress 來發布 HTTPS 服務,因此需要Ingress Controller并進行配置,啟用 HTTPS 及其路由。

cert-manager作為一系列部署資源在Kubernetes集群中運行。

CustomResourceDefinitions(CRD) 用于配置證書頒發機構和請求證書。

安裝cert-manager

使用常規清單安裝

所有的資源(CRD cert-manager, namespace和webhook組件), 都包含在單個的YAML清單中。

安裝CRD和cert-manager。

# Kubernetes 1.16+
$ kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.1.0/cert-manager.yaml
# Kubernetes <1.16
$ kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.1.0/cert-manager-legacy.yaml

PS: 請根據k8s版本自行選擇。

使用helm安裝

準備工作:

#為cert-manager創建名稱空間
$ kubectl create namespace cert-manager
#添加Jetstack Helm存儲庫
helm repo add jetstack https://charts.jetstack.io
#更新您的本地Helm圖表存儲庫緩存
$ helm repo update

CustomResourceDefinition使用kubectl以下命令安裝資源:

# Kubernetes 1.15+
$ kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.1.0/cert-manager.crds.yaml
# Kubernetes <1.15
$ kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.1.0/cert-manager-legacy.crds.yaml

也可以選擇在進行helm安裝時設置--set installCRDs=true:

# Helm v3+
$ helm install \
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--version v1.1.0 \
# --set installCRDs=true
$ helm install \
cert-manager --namespace cert-manager \
--set ingressShim.defaultIssuerName=letsencrypt-prod \
--set ingressShim.defaultIssuerKind=ClusterIssuer \
--version v1.1.0 jetstack/cert-manager
# 上訴命令中的兩個set;用于支持kubernetes.io/tls-acme: "true"annotation 來自動化 TLS
# Helm v2
$ helm install \
--name cert-manager \
--namespace cert-manager \
--version v1.1.0 \
jetstack/cert-manager \
# --set installCRDs=true

驗證安裝:

$ kubectl get pods --namespace cert-manager
NAME READY STATUS RESTARTS AGE
cert-manager-bcd4f8795-zpxsw 1/1 Running 0 2m
cert-manager-cainjector-78cbd59555-dhsp8 1/1 Running 0 2m
cert-manager-webhook-756d477cc4-j5mzt 1/1 Running 0 2m

確認正確設置了證書管理器并能夠頒發基本證書類型:

$ cat <<EOF > test-resources.yaml
apiVersion: v1
kind: Namespace
metadata:
name: cert-manager-test
---
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: test-selfsigned
namespace: cert-manager-test
spec:
selfSigned: {}
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: selfsigned-cert
namespace: cert-manager-test
spec:
dnsNames:
- example.com
secretName: selfsigned-cert-tls
issuerRef:
name: test-selfsigned
EOF

創建測試資源:

$ kubectl apply -f test-resources.yaml
#檢查新創建證書的狀態。您可能需要等待幾秒鐘,然后cert-manager才能處理證書請求
$ kubectl describe certificate -n cert-manager-test
#最后清理測試資源
$ kubectl delete -f test-resources.yaml

創建證書簽發服務

cert-manager安裝之后, 需要定義cluster issuer 或者 issuer資源, 才能進行證書的頒發. 這些資源代表特定的簽名機構. 說明請參考官方文檔. 支持多種的簽發類型,這里我們使用的ACME。

關于ACME有以下兩種認證方式:

  • HTTP01:適用于有公網IP的ingress資源. 且配置簡單。
  • DNS01:適用于內網的k8s集群,且沒有公網IP,實現自動化,需借助第三方工具;當然cert-manager也是默認支持一些域名服務商的,對于不支持的廠商也提供了通用的webhook方法. 如果沒有在列表中,可以自己通過example實現。

簡單理解,HTTP01就是通過請求你需要申請證書的域名下的;例如:www.example.com/.well-know/acme-challenge/CR-WBJ-XXXXXXXX 的路徑,去校驗網站; 前提是此路徑必須公網能正常訪問,且域名解析已正確指向你的ingress的公網地址. 就是校驗ingress的公網IP以及域名解析的指向都必須是正確的. 才能頒發證書。

簡單理解,DNS01就是acme服務器會給你生成一個txt的解析,需要您正確添加到您的DNS管理后臺當中,且當ACME服務器校驗解析生效時,才能證明域名的歸屬權是屬于您的,才能給您頒發證書。

HTTP01

配置ClusterIssuer:

PS: letsencrypt-staging 這里官網提供的實例是臨時, 如果采用此ClusterIssuer默認會生成暫存 Lets Encrypt 證書,暫存證書由 CN=Fake LE Intermediate X1 頒發,如果你得到此證書,也表示已自動申請成功.將ClusterIssuer YAML 中的 ACME 服務器替換為https://acme-v02.api.letsencrypt.org/directory;并創建一個新的名字為letsencrypt-prod的ClusterIssuer;且郵箱也必須替換。

官方示例:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-staging
spec:
acme:
# You must replace this email address with your own.
# Let's Encrypt will use this to contact you about expiring
# certificates, and issues related to your account.
email: user@example.com
server: https://acme-staging-v02.api.letsencrypt.org/directory
privateKeySecretRef:
# Secret resource that will be used to store the account's private key.
name: example-issuer-account-key
# Add a single challenge solver, HTTP01 using nginx
solvers:
- http01:
ingress:
class: nginx

letsencrypt-prod:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
# You must replace this email address with your own.
# Let's Encrypt will use this to contact you about expiring
# certificates, and issues related to your account.
email: yang-li@live.cn
server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
# Secret resource that will be used to store the account's private key.
name: letsencrypt-prod-account-key
# Add a single challenge solver, HTTP01 using nginx
solvers:
- http01:
ingress:
class: nginx

然后可直接創建這個Clusterissuer資源:

$ kubectl create -f cluster-issuer.yaml
clusterissuer.certmanager.k8s.io "letsencrypt-prod" created
$ kubectl get clusterissuer
NAME AGE
letsencrypt-prod 16s

這里由于我沒有公網的ingress資源以及集群,這里我就不再進行測試了。

DNS01

這里由于我的k8s集群在內網,且ingress使用的是二層的metalb. 所以我只能使用DNS01這種ACME的校驗方式進行證書的申請。

由于我們的域名解析服務使用的是阿里云的.這里我們通過官方鏈接找到了alidns-webhook 按照官方的步驟,我們成功申請到了證書。

Install alidns-webhook:

# Install alidns-webhook to cert-manager namespace. 
kubectl apply -f https://raw.githubusercontent.com/pragkent/alidns-webhook/master/deploy/bundle.yaml

Create secret contains alidns credentials:

這里的要進行base64轉碼:

apiVersion: v1
kind: Secret
metadata:
name: alidns-secret
namespace: cert-manager
data:
access-key: YOUR_ACCESS_KEY
secret-key: YOUR_SECRET_KEY

關于Accesskey 和 AccessSecret大家可以在自己的阿里云賬戶中創建,并進行DNS域名管理的相關授權,也可以給阿里云提工單。

Clusterissuer:

apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
# Change to your letsencrypt email
email: zhangsan@example.com
server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: letsencrypt-prod-account-key
solvers:
- dns01:
webhook:
groupName: acme.yourcompany.com
solverName: alidns
config:
region: ""
accessKeySecretRef:
name: alidns-secret
key: access-key
secretKeySecretRef:
name: alidns-secret
key: secret-key
PS: 如果替換groupName,則需要在開始的bundle.yaml文件中也進行替換.

配置ingress:

這里由于我的系統當中已經安裝了kuboard的web-ui; 所以這里我們直接創建ingress即可。

如何安裝kuboard:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kuboard-dashboard
namespace: kube-system
annotations:
kubernetes.io/ingress.class: "nginx"
cert-manager.io/cluster-issuer: "letsencrypt-prod"
nginx.ingress.kubernetes.io/force-ssl-redirect: 'true' #強制HTTPS跳轉
spec:
tls:
- hosts:
- kuboard.it.example.cn
secretName: kuboard.it.example.cn-tls
rules:
- host: kuboard.it.example.cn
http:
paths:
- path: /
backend:
serviceName: kuboard
servicePort: 80

以下排錯和校驗命令:

$ kubectl get certificate
$ kubectl describe certificate NAME
$ kubectl describe secret NAME
$ kubectl describe order NAME
$ kubectl describe challenge NAME

最后的PS: 這里由于我內網的DNS服務器對我申請的域名證書進行了攔截,導致報錯如下:

E1202 04:05:41.696710       1 sync.go:182] cert-manager/controller/challenges "msg"="propagation check failed" "error"="DNS record for \"kuboard.it.example.cn\" not yet propagated" "dnsName"="kuboard.it.example.cn" "resource_kind"="Challenge" "resource_name"="kuboard.it.example.cn-tls-m5tmf-601210408-2135799246" "resource_namespace"="kube-system" "resource_version"="v1" "type"="DNS-01"


責任編輯:姜華 來源: 今日頭條
相關推薦

2023-01-06 08:16:21

Kubernetesapiserver

2023-03-01 19:03:35

K8s服務域名證書

2024-05-09 08:24:01

2022-03-15 08:36:34

NginxKubernetesIngress

2022-10-12 08:03:21

k8sistioCA

2021-12-22 07:47:42

Kubernetes 運維開源

2022-02-15 14:22:46

灰度發布互聯網業務

2025-03-25 13:56:17

2019-04-11 10:47:59

NginxHTTPS自簽發證書

2024-01-30 07:58:41

KubernetesGAMMA網關

2020-11-16 10:50:27

KubernetesIngressLinux

2022-03-03 08:42:10

NodePortServiceKubernetes

2023-03-03 11:12:34

Kubernetes控制器后端

2021-06-07 13:53:38

ServiceIngressKubernetes

2024-03-26 12:08:20

加密NginxHTTP

2021-03-18 09:07:20

Nginx原理實踐

2021-10-26 10:28:41

開發架構Kubernetes

2020-02-24 20:45:33

控制器技術選型技巧

2021-01-27 12:40:09

NginHTTPS前端

2021-09-08 16:03:12

Kubernetes 安全開源
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产免费国产 | 久久久毛片 | 国产精品综合久久 | 在线免费观看日本视频 | 亚洲成人黄色 | 久久在线看 | 一区二区精品视频 | 成人久久网 | 国产激情自拍视频 | 国产一区 | 欧美日韩一区二区在线播放 | 国产一区二区三区 | 91精品国产综合久久久亚洲 | 国产免费一区二区 | 国产在线一| 一级片在线视频 | 久久久欧洲 | 国产成人自拍av | 国产精品99久久久久久www | 国产一区二区三区日韩 | 日本欧美国产在线观看 | 亚洲精品一区二区 | 毛片在线免费 | 成人亚洲 | 特级a欧美做爰片毛片 | 黄色片网站国产 | 国产精品视频一二三区 | 国产视频一区二区 | 国产一区二区三区免费观看视频 | 在线免费观看视频你懂的 | 一区二区三区久久久 | 91夜色在线观看 | 人人干人人爽 | 午夜影视 | 91传媒在线观看 | 久久免费视频网 | 亚洲欧美v | 欧美一区二区三区免费电影 | 一级黄色毛片免费 | 国产婷婷精品av在线 | 日韩成人免费视频 |