阿里云ACK中Nginx ingress使用CLB上的Https证书
背景: 我们在客户那里部署了一套服务, 服务运行在客户提供的ACK集群, 我们删除了客户ACK自带的nginx ingress, 通过自建的方式部署了两套ingress, 一套绑定了公网CLB, 一套绑定了内网CLB, 也就是说是CLB转发到ingress, 然后通过ingress转发到其他服务. 现在需要配置Https证书, 客户不同意我们配置证书到ingress, 客户将证书放在了CLB上, 给了一个证书ID
查询阿里云文档阿里云的文档还是很详细, 通过google查询到文档地址: 通过Annotation配置传统型负载均衡CLB
具体可以查看这里
HTTPS请求会在CLB层解密,然后以HTTP请求的形式发送给后端的Pod。
配置LoadBalancer类型的Service因为我们的CLB是只给ingress使用, 所以修改ingress的Service配置yaml:
12345678910111213141516171819202122232425262728293031323334353637383940apiVersion: v1kind: Servicemetadata: ...
Django RestFramework 自定义显示字段
有的时候序列化出来的字段并不是我们想要的, 比如说返回的用户id,而我们想要返回的是用户名, 这个时候可以用到django rest framework的自定义字段功能。
先看一下原始数据1234567891011121314[ { "id": 1, "name": "1", "desc": "sdg", "user": 1 }, { "id": 5, "name": "1", "desc": "sdg", "user": 2 }]
这里user显示的是id, 并不是我们想要的username
增加一个字段, 显示usernamemodels:12345678from djan ...
curl常用操作记录
curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。
它的功能非常强大,命令行参数多达几十种。如果熟练的话,完全可以取代 Postman 这一类的图形界面工具。
参考文章: https://www.ruanyifeng.com/blog/2019/09/curl-reference.html
参数-A-A参数指定客户端的用户代理标头,即User-Agent。curl 的默认用户代理字符串是curl/[version]。
12345# 将User-Agent改成 Chrome 浏览器curl -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36' https://google.com# 移除User-Agentcurl -A '' https://google.com
也可以通过-H(更改Header ...
检查域名支持的HTTPS协议版本
使用NMAP(推荐)依赖于nmap, nmap需要安装
1nmap --script ssl-enum-ciphers -p 443 baidu.com
比如GitHub只支持TLS1.2和TLS1.3:
在线验证随便找了两个网站:
https://www.ssleye.com/ssltool/cipher_suites.html
https://www.site24x7.com/zhcn/tools/tls-checker.html
使用CURL验证12curl --tlsv1 --tls-max 1.0 https://github.comcurl --tlsv1 --tls-max 1.0 https://www.baidu.com
报错说明不支持当前版本:
1curl: (35) LibreSSL/3.3.6: error:1404B42E:SSL routines:ST_CONNECT:tlsv1 alert protocol version
使用OpenSSL12345678# 验证TLS1.2openssl s_client -connect www.baidu ...
使用openssl对文件进行加密
使用密码加密12345678# 指定输入和输出文件操作openssl enc -e -aes256 -in test.sh -out enc.sh# 或者使用管道符cat test.sh | openssl enc -e -aes256 -out enc.sh# 压缩后加密tar zcvf - 1.sh | openssl enc -e -aes256 -out temp
使用密码解密12345678# 指定输入和输出文件操作openssl enc -d -aes256 -in enc.sh -out 1.sh# 或者使用管道符进行操作openssl enc -d -aes256 -in enc.sh | tee a.sh# 解密后进行解压openssl enc -d -aes256 -in temp | tar zxvf -
查看Navicat保存的密码
Navicat密码一旦保存, 再次编辑就没法查看密码是什么了, 包括之前可以使用的星号密码查看器也看不到密码, 我们可以通过导出链接文件, 然后通过解密被加密的密码来获取密码原文.
导出加密密码打开Navicat – 文件 – 导出连接
接下来的弹窗里, 勾选导出密码, 然后导出成ncx文件
用文本编辑器打开 connections.ncx 文件, 复制 password 的值, 这个就是加密后的密码.
使用PHP解密电脑没有PHP环境, 所以选择使用Docker来运行PHP, 操作如下:
准备解密脚本vim decode_navicat_password.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 ...
Django RestFramework 使用router生成路由
django使用的是模块化结构,每个app都可以独立拆分,那么注册路由的时候也可以灵活一点, 使用drf框架提供的router来自动生成路由
应用级 urls.py
12345678910111213from django.urls import path, includefrom rest_framework import routersfrom app01 import viewsrouter = routers.DefaultRouter()router.register(r'groups', views.GroupViewSet)router.register(r'students', views.StudentViewSet)urlpatterns = [ path('/', include(router.urls)),]
这里path路径是/, 引用了router, router注册了两个路由, 分别是 groups 和 students, 生成的api路径就是 /groups/ 和 /stude ...
bat命令修改windows环境变量
在bat下修改环境变量有几种方式, 比如 set setx vmic ENVIRONMENT
setwindows 的set 和 bash 里面直接赋值类似, 只在当前脚本中生效, 比如
1234set a=becho %a%b
setxsetx和set类似, 不一样的是setx会把设置持久化保存起来
1setx a c
因为setx直接将环境变量保存在注册表中, 所以cmd终端需要关闭重新打开才能生效
12echo %a%c
后续就算重启电脑, 也会生效, 不过数据量比较大的时候会报错: WARNING: The data being saved is truncated to 1024 characters, 最终修改的内容也是不完整的。所以不建议使用
vmicwmic常用命令1234567891011# 创建系统变量wmic ENVIRONMENT create name="PPTV_HOME",username="<system>",VariableValue="%home%"# 创建用户变量(替换一下 ...
使用kubectl进行多集群管理
平常使用跳板机来管理, 经常多个环境多套集群, 那么如何用一个kubectl如何管理这些集群.
使用不同的kubeconfig管理使用不同的Linux用户每个Linux用户的 ~/.kube/config 配置不同即可, 比如创建一个uat用户,一个prod用户, 分别配置不同的config文件
使用环境变量config文件放到当前目录下
1KUBECONFIG=config-uat kubectl get pod
环境变量也可以写成全局的在.bashrc里面
1export KUBECONFIG=config-uat
使用参数同使用环境变量
1kubectl get pod --kubeconfig=config-uat
使用一个kubeconfig准备确保每个kubeconfig里面部分参数唯一性,可以手动修改一下
合并配置文件假设一个配置文件名为: uat, 另一个为: prod
1KUBECONFIG=uat:prod kubectl config view --flatten > merged-kubeconfig
验证合并结果完成合并后,可以使用以下命令验证 ...
Kubernetes使用存储挂载单个文件
一般来说, 挂载存储都是把一个PV挂载到一个路径, 挂载后此路径下原来的文件就会不见, 只能看到挂载后的文件, 和在Linux下挂载磁盘是一样的. 那么现在有个需求:
需求此服务是java程序, 数据库使用的是内嵌的h2 database, 下图中的两个文件就是数据库的文件. 这两个文件是存在于根目录下的, 假设此程序数据库文件是代码写死的(真实情况是: 数据库路径是可以更改的), 现在要部署到kubernetes中, 并对数据库做持久化.
使用subpath根据之前挂载configmap到单个文件的经验, 我们应该使用subpath来挂载, 先创建好pvc, yml如下
1234567891011apiVersion: v1kind: PersistentVolumeClaimmetadata: name: metabase-pvcspec: storageClassName: managed-nfs-storage accessModes: - ReadWriteOnce resources: requests: storage: 10Gi
st ...