如何使用cert-manager管理网关的证书
cac55 2024-10-19 02:57 23 浏览 0 评论
cert-manager是一个证书生命周期管理系统,支持证书的申请、部署等功能。您可以使用cert-manager颁发ASM网关的证书,从而可以使用HTTPS协议通过ASM网关访问服务,保证数据传输的安全。本文介绍如何使用cert-manager管理网关的证书。
背景信息
cert-manager支持签发自签名证书和DNS域名证书,从而可以使用HTTPS协议通过ASM网关访问服务。这两种证书的区别如下:
- 自签名证书:自签名证书仅具有加密功能,无身份验证功能。您可以在命令行工具中使用HTTPS协议访问ASM网关,但是自签名证书不受Web浏览器的信任,Web浏览器检查HTTPS连接会标记为潜在风险并弹出错误消息,即无法在Web浏览器中使用HTTPS协议通过ASM网关访问服务。
- DNS域名证书:DNS域名证书由受信任的CA机构颁发,兼具加密和身份验证功能。相比自签名证书,DNS域名证书具有更高的安全性,受到Web浏览器的信任。您可以同时在命令行工具和Web浏览器中使用HTTPS协议通过ASM网关访问服务。
在集群中安装cert-manager
在本地安装Helm。
具体操作,请参见 Helm 。
使用kubectl连接集群。
具体操作,请参见 获取集群KubeConfig并通过kubectl工具连接集群 。
创建cert-manager命名空间
kubectl create namespace cert-manager
添加cert-manager Chart。
helm repo add jetstack https://charts.jetstack.io
获取cert-manager Chart的最新信息。
helm repo update
安装cert-manager。
说明 cert-manager的版本需要和Kubernetes版本保持兼容。关于cert-manager和Kubernetes版本的对应关系,请参见 Supported Releases 。
helm install \
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--version v1.1.0 \
--set installCRDs=true
使用cert-manager签发自签名证书
步骤一:在集群中生成自签证书
创建 issuer.yaml 。
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: selfsigned
spec:
selfSigned: {}
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: istio-ingressgateway-certs
spec:
isCA: true
duration: 2160h # 90d
secretName: istio-ingressgateway-certs
commonName: istio-ingressgateway-certs
subject:
organizations:
- cluster.local
- cert-manager
issuerRef:
name: selfsigned
kind: Issuer
group: cert-manager.io
---
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: istio-ingressgateway-certs
spec:
ca:
secretName: istio-ingressgateway-certs
创建自签名CA来颁发工作负载证书。
kubectl apply -f issuer.yaml -n istio-system
查看证书。
$. kubectl get secret -n istio-system
# 预期输出:
NAME TYPE DATA AGE
istio-ingressgateway-certs kubernetes.io/tls 3 68m
步骤二:添加证书和私钥挂载卷到入口网关
- 登录 ASM控制台 ,在左侧导航栏,选择。
- 在 网格管理 页面,单击目标实例名称,然后在左侧导航栏,选择。
- 在 入口网关 页面的目标网关右侧,单击 查看YAML 。
- 在 编辑 对话框,添加如下信息到 spec 字段。
secretVolumes:
- mountPath: /etc/istio/ingressgateway-certs
name: ingressgateway-certs
secretName: istio-ingressgateway-certs
添加之后的YAML文件示例如下: 展开查看YAML
apiVersion: istio.alibabacloud.com/v1beta1
kind: IstioGateway
metadata:
name: ingressgateway
namespace: istio-system
spec:
clusterIds:
- c58638b491a5248669b59609e0a17****
cpu: {}
externalTrafficPolicy: Local
maxReplicas: 1
minReplicas: 1
ports:
- name: status-port
port: 15020
targetPort: 15020
- name: http2
nodePort: 31380
port: 80
targetPort: 80
- name: https
nodePort: 31390
port: 443
targetPort: 443
- name: tls
port: 15443
targetPort: 15443
replicaCount: 1
secretVolumes:
- mountPath: /etc/istio/ingressgateway-certs
name: ingressgateway-certs
secretName: istio-ingressgateway-certs
serviceAnnotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: slb.s1.small
serviceType: LoadBalancer
步骤三:在集群中检查入口网关配置
添加证书和私钥挂载卷到入口网关后,入口网关会加载证书与密钥。
验证 tls.crt 与 tls.key
执行以下命令,验证 tls.crt 与 tls.key 已被挂载到入口网关Pod中。
kubectl exec -it -n istio-system $(kubectl -n istio-system get pods -l istio=ingressgateway -o jsonpath='{.items[0].metadata.name}') -- ls -al /etc/istio/ingressgateway-certs
预期输出:
lrwxrwxrwx 1 root root 14 May 9 01:14 tls.crt -> ..data/tls.crt
lrwxrwxrwx 1 root root 14 May 9 01:14 tls.key -> ..data/tls.key
检查Ingress gateway证书
执行以下命令,检查Ingress gateway证书中的 Subject 字段的正确性。
kubectl exec -it -n istio-system $(kubectl -n istio-system get pods -l istio=ingressgateway -o jsonpath='{.items[0].metadata.name}') -- cat /etc/istio/ingressgateway-certs/tls.crt | openssl x509 -text -noout | grep 'Subject:'
预期输出:
Subject: O = cert-manager + O = cluster.local, CN = istio-ingressgateway-certs
检查Ingress gateway代理
执行以下命令,检查Ingress gateway的代理能够正确访问证书。
kubectl exec -it -n istio-system $(kubectl -n istio-system get pods -l istio=ingressgateway -o jsonpath='{.items[0].metadata.name}') -- curl 127.0.0.1:15000/certs
预期输出:
{
"certificates": [
{
"ca_cert": [
{
"path": "\u003cinline\u003e",
"serial_number": "4edcf3",
"subject_alt_names": [],
"days_until_expiration": "7251",
"valid_from": "2022-01-06T06:17:00Z",
"expiration_time": "2042-01-01T06:22:03Z"
}
],
...........
步骤四:验证使用HTTPS协议访问服务是否成功
在集群中创建服务。
创建 myexample-nginx.conf
使用以下内容,创建 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
启用Sidecar自动注入
执行以下命令,为命名空间default启用Sidecar自动注入。
kubectl label namespace default istio-injection=enabled
创建 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
通过kubectl连接ASM。
具体操作,请参见 通过控制面kubectl访问Istio资源 。
在ASM中创建网关规则。
创建 istio-myexample-customingressgateway.yaml 。
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: istio-myexample-customingressgateway
spec:
selector:
istio: ingressgateway
servers:
- hosts:
- '*.aliyun.com'
port:
name: http
number: 80
protocol: HTTP
tls:
httpsRedirect: true
- hosts:
- '*.aliyun.com'
port:
name: https
number: 443
protocol: HTTPS
tls:
mode: SIMPLE
privateKey: /etc/istio/ingressgateway-certs/tls.key
serverCertificate: /etc/istio/ingressgateway-certs/tls.crt
执行以下命令,创建网关规则。
kubectl apply -f istio-myexample-customingressgateway.yaml
在ASM中创建虚拟服务。
创建 istio-myexample-customvirtualservice.yaml 。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: istio-myexample-customvirtualservice
spec:
hosts:
- "www.aliyun.com"
gateways:
- istio-myexample-customingressgateway
http:
- route:
- destination:
host: myexampleapp.default.svc.cluster.local
port:
number: 80
执行以下命令,创建虚拟服务。
kubectl apply -f istio-myexample-customvirtualservice.yaml
在集群中获取入口网关服务的地址。
kubectl get svc -n istio-system -l istio=ingressgateway
通过HTTPS协议访问aliyun.com服务。
curl -k -H Host:www.aliyun.com --resolve www.aliyun.com:443:{替换成真实的入口网关IP地址} https://www.aliyun.com
预期输出:
Welcome to aliyun.com!
相关推荐
- 服务器用的CPU和个人电脑用的CPU有什么区别?一篇文章告诉你!
-
服务器cpu和普通cpu的区别你的电脑CPU是‘短跑健将’,服务器CPU却是‘铁人三项选手’——它不追求瞬间爆发力,而要7×24小时扛住千军万马的数据洪流!想知道为什么企业机房敢收天价服务费?答案全藏...
- “吃鸡”新版本第1天,玩家进入游戏点击“立即更新”,后悔了!
-
欢迎诸位小伙伴们来到天哥开讲的《和平精英》“精英小课堂”~每逢两三个月,这款游戏就会迎来一次大版本迭代更新,很多朋友会在第一时间更新版本,前往全新的主题模式里一探究竟。不过也有一些老玩家并不会立刻更新...
- 中关村在线·aigo存储杯《无畏契约》全国高校争霸赛招募启事
-
以青春之名,燃电竞之火1赛事背景与宗旨在金秋送爽的9月,芊芊学子们即将回归校园生活。为了给精彩的校园生活锦上添花,由中关村在线与aigo存储联合主办的《无畏契约》全国高校争霸赛正式启幕,旨在为全国高...
- 【生肖狗】9.7-9.10提醒:人算不如天算,转变即是转机
-
九月上旬的风,带着秋意的清爽,也带着几分不可捉摸的变数。对于生肖狗的朋友们来说,9月7日到9月10日这四天,格外需要留意“计划与变化”的碰撞——你们向来习惯提前规划,做事稳妥周全...
- 转转客服IM系统的WebSocket集群架构设计和部署方案
-
本文由转转技术李帅分享,原题“转转客服IM的WebSocket集群部署方案”,下文有修订和重新排版。1、引言转转作为国内头部的二手闲置交易平台,拥有上亿的用户。用户在使用转转app遇到问题时,一般可以...
- 上线3天Steam好评率86%,《时间旅者:重生曙光》开启生存恐怖新篇章
-
这里究竟发生了什么?末日降临,真正的故事悄然启幕。目前,生存恐怖类游戏《时间旅者:重生曙光(Cronos:TheNewDawn)》已在PC(Steam、EpicGamesStore)、P...
- 什么神仙洗衣机让我一天有28小时?拆开松下「大四洗」藏了啥秘密
-
说起家庭洗衣的烦恼,想必很多人都有过类似的经历:贴身内衣要单独洗,宝宝的口水巾得小心呵护,宠物玩具怕藏污纳垢,床单被套又体积庞大,把这些东西混在一起洗担心越洗越脏,分开洗又得反复操作,洗完烘、烘完再洗...
- 爆料人挖出GTA6注册的奇葩域名 延续经典讽刺风格
-
等待《侠盗猎车手6》的日子跨越了数个春秋,在游戏圈期盼着这部可能成为史上最重磅游戏的过程中,每过一段时间就会有些许消息浮出水面。最新线索来自数据挖掘者Tez2在GTA论坛的发现,他可能偶然发现了关于...
- 跟着故事去旅行——读《驼峰间:旅行、探险与征服》
-
作者:郭冰茹《驼峰间》记录了旅行家伊本·白图泰有生之年流传的一则寓言,说一对父子被关进了监狱,有一天儿子问父亲他们每天吃的都是些什么肉,父亲说有牛、羊和骆驼,并且详细地描述了每种动物的特点。但不管父亲...
- 前端工程师需要熟悉的Linux服务器(SSH 终端操作)指令
-
在Linux服务器管理中,SSH(SecureShell)是远程操作的核心工具。以下是SSH终端操作的常用命令和技巧,涵盖连接、文件操作、系统管理等场景:一、SSH连接服务器1.基本连接...
- 跳票6年后,「丝之歌」首发把Steam服务器干爆了 | 玩点好的
-
文丨果脯樱花隧道昨天晚上22点,「鸽」了6年的《空洞骑士:丝之歌》终于上线,算是了却不少玩家的执念。毕竟,这款游戏实在让人等了太多太多年,而且曾有过多次定档后跳票的「案底」,不知道把多少人都整出了P...
- 对标魔兽失败!腾讯版“魔兽”运营一年多后,宣布国际服凉凉
-
大家好,这里是正惊游戏,我是正惊小弟。有很多游戏都想干掉《魔兽世界》,但是大部分魔兽杀手都知道自己不是魔兽的对手,不过是想蹭一下人气而已。腾讯也有一款曾经想对标魔兽的大作,可是上线才一年半国际服就宣布...
- 408 Request Timeout:服务器等待客户端发送请求的时间过长。
-
408RequestTimeout是HTTP状态码之一,表示客户端在发送请求时,服务器等待的时间过长,最终放弃了处理该请求。此问题通常与网络延迟、客户端配置、服务器设置或者应用程序的性能有关...
- 梦幻西游:9.9维护解读,全新时间服锁定129级
-
梦幻西游:9.9维护解读,全新时间服锁定129级9月9日维护解读。1、教师节活动开启,一共7天。挂机,答题,收笔墨纸砚,收海马,搞起来。或者是提前收点家具,教师节期间体力珍贵,家具会涨价。又或者是教师...
- 只是拆掉一面墙,空间就立马大变样,这种设计思路,值得学习
-
你有没有过这样的经历?刚买的房子户型图看起来方方正正,装修完却发现——玄关鞋柜只能塞在角落,进门就撞墙;餐厅正好在过道中间,吃饭像走流程;明明有四个房间,却有一个空着没用,像块食之无味的鸡肋;客餐厅之...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 服务器用的CPU和个人电脑用的CPU有什么区别?一篇文章告诉你!
- “吃鸡”新版本第1天,玩家进入游戏点击“立即更新”,后悔了!
- 中关村在线·aigo存储杯《无畏契约》全国高校争霸赛招募启事
- 【生肖狗】9.7-9.10提醒:人算不如天算,转变即是转机
- 转转客服IM系统的WebSocket集群架构设计和部署方案
- 上线3天Steam好评率86%,《时间旅者:重生曙光》开启生存恐怖新篇章
- 什么神仙洗衣机让我一天有28小时?拆开松下「大四洗」藏了啥秘密
- 爆料人挖出GTA6注册的奇葩域名 延续经典讽刺风格
- 跟着故事去旅行——读《驼峰间:旅行、探险与征服》
- 前端工程师需要熟悉的Linux服务器(SSH 终端操作)指令
- 标签列表
-
- 如何绘制折线图 (52)
- javaabstract (48)
- 新浪微博头像 (53)
- grub4dos (66)
- s扫描器 (51)
- httpfile dll (48)
- ps实例教程 (55)
- taskmgr (51)
- s spline (61)
- vnc远程控制 (47)
- 数据丢失 (47)
- wbem (57)
- flac文件 (72)
- 网页制作基础教程 (53)
- 镜像文件刻录 (61)
- ug5 0软件免费下载 (78)
- debian下载 (53)
- ubuntu10 04 (60)
- web qq登录 (59)
- 笔记本变成无线路由 (52)
- flash player 11 4 (50)
- 右键菜单清理 (78)
- cuteftp 注册码 (57)
- ospf协议 (53)
- ms17 010 下载 (60)