摘要:问题场景:基于 ASP.NET Core 路由模板(route template)从 url 字符串取值,路由模板是 "/{blogApp}/{postType}/{idOrSlug}.html",需要取值的博文 url 地址实例 https://www.cnblogs.com/cmt/p/14408628.html 。参考 ASP.NET Core 源码中的测试代码 RouteTest.cs#L56,通过 Route.RouteAsync() 方法实现了,RouteTest 中好几处用了 Mock,这里实现时没有使用 Mock。 阅读全文
posted @ 2021-03-01 16:10 dudu 阅读(5) 评论(0) 推荐(0) 编辑
摘要:园子 open api (api.cnblogs.com) 的授权服务器(authorization server,oauth.cnblogs.com)基于 IdentyServer 实现,而登录则通过单独的登录中心(account.cnblogs.com)完成,这样的场景对 IdentyServer 来说似乎是非典型应用场景,在网上几乎找不到相关的参考资料。IdentyServer 的典型应用场景是授权(authorization)与登录验证(authentication)在同样一个应用中 阅读全文
posted @ 2021-02-15 15:01 dudu 阅读(94) 评论(0) 推荐(0) 编辑
摘要:我们有一个前端使用 Angular 的项目,采用 Kubenetes 默认部署方式 rolling updates 发布时,在更新 pod 的阶段有时会出现灰屏的现象,问题源于新旧 pod 的前端静态文件不兼容,想通过 kubernetes 的蓝绿部署(blue-green deployments)解决这个问题。 阅读全文
posted @ 2021-02-03 22:06 dudu 阅读(71) 评论(2) 推荐(1) 编辑
摘要:在 gitlab 的 Amin Area 页面,打开侧边栏的 Kubernetes ,点击 Integrate with a cluster certificates,选择 Connect existing cluster,输入以下:Kubernetes cluster name:输入集群名称 `cnblogs-production`;CA Certificate: 通过下面的命令获取证书;* Service Token:通过以下步骤拿到 service token;然后点击 "Add Kubernetes cluster" 按钮进行提交,提交时报错 阅读全文
posted @ 2021-02-01 18:48 dudu 阅读(34) 评论(3) 推荐(1) 编辑
摘要:我们部署在 kubernetes 集群上的每个 ASP.NET Core 应用的 appsettings.Production.json 都保存在各个应用的 ConfigMap 中,这些 appsettings.Production.json 中有些重复的配置,如果要修改这些配置,需要到各个应用中一个一个修改,很是麻烦。 阅读全文
posted @ 2021-01-25 22:42 dudu 阅读(49) 评论(1) 推荐(0) 编辑
摘要:这篇博文记录的是修改 k8s 集群 master(control plane) 的主机名与节点名称的操作步骤,是“用 master 服务器镜像恢复出新集群”的后续博文,目标是将 master 主机名与节点名称由 `k8s-master0` 修改为 `kube-master0`。服务器操作系统是 Ubuntu 18.04,Kubernetes 版本是 1.20.2。 阅读全文
posted @ 2021-01-21 11:03 dudu 阅读(246) 评论(0) 推荐(1) 编辑
摘要:本文记录的是将 kubernetes 集群从 1.17.0 升级至最新版 1.20.2 的实际操作步骤,由于 1.17.0 无法直接升级到 1.20.2,需要进行2次过滤升级,1.17.0 -> 1.18.0 -> 1.19.0 -> 1.20.2。先在 control plane node 上进行升级操作,通过下面的命令查看最新版 kubeadm 的版本号 阅读全文
posted @ 2021-01-16 12:19 dudu 阅读(128) 评论(0) 推荐(0) 编辑
摘要:我们的生产环境 kubernetes 集群是用阿里云服务器自己搭建的,这篇博文记录的是如何通过已有集群的1台 master 服务器的阿里云ECS镜像恢复出同样配置的新集群。这台 master 服务器的主机名是 k8s-master0,IP地址是 10.0.1.81。首先对 k8s-master0 服务器打快照并生成镜像,用这个镜像创建新的服务器 阅读全文
posted @ 2021-01-13 21:24 dudu 阅读(93) 评论(1) 推荐(0) 编辑
摘要:昨天基于 ASP.NET Core Policy-based authorization 重构了博文访问授权的代码,在这篇随笔中记录一下。创建 Authorization Requirement,配置 Policy,添加 Claim,实现 PermissionEvaluator,调用 IPermissionEvaluator 获取博文访问授权结果 阅读全文
posted @ 2020-06-27 12:01 dudu 阅读(667) 评论(0) 推荐(3) 编辑
摘要:今天优化了 k8s 生产集群的部署,为系统(linux 与 k8s系统pod)保留最低资源,以免应用 pod 负载高拖垮整个节点。配置方法是手动给每个节点的 kubelet 添加配置文件 `/etc/default/kubelet` ,并在其中通过 UBELET_EXTRA_ARGS 环境变量,添加了 `kube-reserved`, `system-reserved`, `eviction-hard` 这3个配置 阅读全文
posted @ 2020-03-28 14:26 dudu 阅读(1175) 评论(3) 推荐(0) 编辑
摘要:由于使用 nginxinc/kubernetes-ingress 后遭遇“K8s 中 ASP.NET Core 应用获取不到客户端真实 IP 地址”的问题(X-Forwarded-For转发问题),于是被迫见异思迁试试换成 kubernetes/ingress-nginx 作为 nginx ingress controller 。 阅读全文
posted @ 2020-02-21 12:23 dudu 阅读(3629) 评论(2) 推荐(4) 编辑
摘要:开始天真地以为只要写一个 ingress 配置文件并部署好就行了。但部署后发现所有 node 服务器上没有任何进程监听 80 端口,显然不对。原来 k8s 没有内置 ingress controller ,需要安装第三方的 ingress controller ,比如 nginx ingress controller ,上面通过 cnblogs-ingress.yaml 只是创建了 ingress 资源 阅读全文
posted @ 2020-01-29 17:56 dudu 阅读(2035) 评论(5) 推荐(2) 编辑
摘要:k8s 集群搭建好了,准备将 docker swarm 上的应用都迁移到 k8s 上,但需要一个一个应用写 yaml 配置文件,不仅要编写 deployment.yaml 还要编写 service.yaml ,而很多应用的配置是差不多的,这个繁琐工作让人有些望而却步。k8s 有没有针对这个问题的解救之道呢?发现了救星 Helm —— k8s 应用程序包管理器,实际操作体验一下。 阅读全文
posted @ 2020-01-22 17:25 dudu 阅读(2029) 评论(1) 推荐(2) 编辑
摘要:昨天晚上通过压测验证了 HPA 部署成功了。所使用的 HPA 配置文件如下。最小 pod 副本数是 2 ,最大 pod 副本数是 8 ,基于 `http_requests_received` 指标(对应的就是 QPS )进行伸缩,当指标平均值高于 10 时,自动进行扩容。使用下面的压测命令发起了 100 个并发请求。随后 HPA 自动将对应的 pod 副本由 2 个扩容至 8 个 阅读全文
posted @ 2020-01-20 15:31 dudu 阅读(1933) 评论(1) 推荐(5) 编辑
摘要:部署好了 kube-prometheus 与 k8s-prometheus-adapter ,使用下面的配置文件部署 HPA(Horizontal Pod Autoscaling) 却失败。通过下面的命令查看 custom.metrics.k8s.io api 支持的 http_requests(每秒请求数QPS)监控指标,发现只有 prometheus_http_requests 指标 ,没有所需的 http_requests 开头的指标。 阅读全文
posted @ 2020-01-18 22:49 dudu 阅读(2288) 评论(0) 推荐(0) 编辑
摘要:部署 k8s-prometheus-adapter 的 custom-metrics-apiserver 时,pod 总是启动失败。用 `kubectl edit secret cm-adapter-serving-certs -n monitoring` 查看 secret 中的配置数据,发现配置名称是 tls.crt 与 tls.key ,而 custom-metrics-apiserver pod 用到的是 serving.crt 与 serving.key 。当时创建 secret 的命令用的是 tls 参数。 阅读全文
posted @ 2020-01-13 23:33 dudu 阅读(610) 评论(0) 推荐(0) 编辑
摘要:自从开始在 kubernetes 集群中部署 nodelocaldns 以提高 dns 解析性能以来,一直被一个问题困扰,只要一部署 nodelocaldns ,在 coredns 中添加的 rewrite 与 hosts 配置(如下)就失效,很是郁闷。部署使用的是下面的命令,在部署时将 nodelocaldns.yaml 中的几个变量进行如下的替换。 阅读全文
posted @ 2020-01-11 21:03 dudu 阅读(3125) 评论(4) 推荐(1) 编辑
摘要:背景:1 台 master 加入集群后发现忘了修改主机名,而在 k8s 集群中修改节点主机名非常麻烦,不如将 master 退出集群改名并重新加入集群(前提是用的是高可用集群);操作步骤:ssh 登录另外一台 master 节点将要改名的 master 节点移出集群 阅读全文
posted @ 2020-01-10 19:09 dudu 阅读(4001) 评论(0) 推荐(1) 编辑
摘要:使用 3 台阿里云服务器(k8s-master0, k8s-master1, k8s-master2)作为 master 节点搭建高可用集群,负载均衡用的是阿里云 SLB ,需要注意的是由于阿里云负载均衡不支持后端服务器自己转发给自己,所以 master 节点的 control-plane-endpoint 不能走负载均衡。先在 k8s-master0 上安装好 k8s ,安装步骤见 Ubuntu 安装 k8s 三驾马车 kubelet kubeadm kubectl ,然后打快照创建阿里云 ecs 镜像。 阅读全文
posted @ 2020-01-09 22:36 dudu 阅读(2021) 评论(5) 推荐(1) 编辑
摘要:搭建的是 k8s 高可用集群,用了 3 台 master 节点,2 台 master 节点宕机后,仅剩的 1 台无法正常工作。运行 netstat -lntp 命令发现 kube-apiserver 根本没有运行,同时发现 etcd 与 kube-proxy 也没运行。通过 docker ps 命令发现 etcd , kube-apiserver, kube-proxy 这 3 个容器都没有运行,etcd 容器在不停地启动->失败->重启->又失败...... 阅读全文
posted @ 2020-01-07 22:15 dudu 阅读(2535) 评论(0) 推荐(0) 编辑