Emm*_*oza 10 kubernetes lets-encrypt cert-manager nginx-ingress microk8s
最近,我尝试在裸机服务器上使用 microk8s 和默认入口控制器设置 LetsEncrypt。
我在网上找到了一些非常有用的指南,但似乎最近对 microk8s 进行了更新,改变了入口控制器的配置方式。
为了节省大家的时间,我准确地写下了我所做的事情。
如果您遇到困难或需要更好地理解,这里有一些有用的资源。
https://cert-manager.io/docs/installation/kubernetes/
https://cert-manager.io/docs/tutorials/acme/ingress/
该链接对于故障排除非常有用
Emm*_*oza 30
本指南旨在使用 Microk8s 和默认 Ingress 控制器通过 Kubernetes 设置 Letsencrypt。
使用的版本:
microk8s 版本 1.21/稳定
证书管理器 v1.3.1
先决条件:将端口 80 和 443 转发到您的服务器。设置指向您的服务器的域名。
安装 microk8s
snap install microk8s --classic --channel=1.21/stable
Run Code Online (Sandbox Code Playgroud)
启用 DNS 和入口
sudo microk8s enable dns ingress
Run Code Online (Sandbox Code Playgroud)
我们将使用 nginx Web 服务器映像创建一个测试 Web 服务器部署/服务来测试 Web 流量
webserver-depl-svc.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: webserver-depl
spec:
selector:
matchLabels:
app: webserver-app
template:
metadata:
labels:
app: webserver-app
spec:
containers:
- name: webserver-app
image: nginx:1.8
---
apiVersion: v1
kind: Service
metadata:
name: webserver-svc
spec:
selector:
app: webserver-app
ports:
- name: webserver-app
protocol: TCP
port: 80
targetPort: 80
Run Code Online (Sandbox Code Playgroud)
应用配置文件
sudo microk8s kubectl apply -f webserver-depl-svc.yaml
Run Code Online (Sandbox Code Playgroud)
现在配置默认入口来为测试网络服务器提供服务
入口路由.yaml
snap install microk8s --classic --channel=1.21/stable
Run Code Online (Sandbox Code Playgroud)
应用入口路由
sudo microk8s kubectl apply -f ingress-routes.yaml
Run Code Online (Sandbox Code Playgroud)
当您访问yourdomain.com时,您应该看到默认的“欢迎来到 nginx!” 启动画面。
现在安装 cert-manager https://cert-manager.io/docs/installation/kubernetes/
sudo microk8s kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.3.1/cert-manager.yaml
Run Code Online (Sandbox Code Playgroud)
下一个命令应显示 3 个 pod,以确认 cert-manager 已安装并正在运行
sudo microk8s kubectl get pods -n=cert-manager
Run Code Online (Sandbox Code Playgroud)
现在创建证书颁发者配置。需要注意的一个细节是,此配置中使用的类是公共的,而不是nginx。这可能是 microk8s 特有的。https://cert-manager.io/docs/tutorials/acme/ingress/
LetsEncrypt-staging.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-staging
spec:
acme:
#change to your email
email: youremail@gmail.com
server: https://acme-staging-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: letsencrypt-staging
solvers:
- http01:
ingress:
class: public
Run Code Online (Sandbox Code Playgroud)
LetsEncrypt-prod.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
#change to your email
email: youremail@gmail.com
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: public
Run Code Online (Sandbox Code Playgroud)
应用两个发行者配置
sudo microk8s kubectl apply -f letsencrypt-staging.yaml
sudo microk8s kubectl apply -f letsencrypt-prod.yaml
Run Code Online (Sandbox Code Playgroud)
现在更新ingress-routes.yaml以使用临时证书。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-routes
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-staging"
spec:
tls:
- hosts:
#change to your domain
- yourdomain.com
secretName: tls-secret
rules:
#change to your domain
- host: yourdomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: webserver-svc
port:
number: 80
Run Code Online (Sandbox Code Playgroud)
应用更新
sudo microk8s kubectl apply -f ingress-routes.yaml
Run Code Online (Sandbox Code Playgroud)
运行下一个命令以确认 Ready=True
sudo microk8s kubectl get certificate
Run Code Online (Sandbox Code Playgroud)
如果返回 true,则表示 HTTP-01 挑战成功。您可以在运行下一个命令的输出末尾看到更多详细信息
sudo microk8s kubectl describe certificate tls-secret
Run Code Online (Sandbox Code Playgroud)
现在更改ingress-routes.yaml以使用生产证书。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-routes
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
tls:
- hosts:
#change to your domain
- yourdomain.com
secretName: tls-secret
rules:
#change to your domain
- host: yourdomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: webserver-svc
port:
number: 80
Run Code Online (Sandbox Code Playgroud)
应用更新
sudo microk8s kubectl apply -f ingress-routes.yaml
Run Code Online (Sandbox Code Playgroud)
现在是关键时刻。运行下一个命令以确认已生成证书。准备好=真
sudo microk8s kubectl get certificate
Run Code Online (Sandbox Code Playgroud)
运行下一个命令并查看最终输出以验证证书是否已颁发。
sudo microk8s kubectl describe certificate tls-secret
Run Code Online (Sandbox Code Playgroud)
现在,如果您访问您的域。你应该会看到成功的小锁!:-)
| 归档时间: |
|
| 查看次数: |
8467 次 |
| 最近记录: |