一、背景

上班后,需要登录集群做些优化。与往常一样,打开页面,开始使用github.com账号登录。结果无效。
这个集群是2016年建成的,与kubernetes同时期的容器平台,只是团队选择了dcos,没有选择k8s。
dcos mesos集群采用oauth0.com的登录服务器,可以通过google、github、microsoft的账号登录,后台通过email对比验证。一旦无法验证,将丢失对集群的管理。当然,只是无法管理,容器还是在跑着。

测试地址
2024-03-08T06:26:48.png

二、过程

2.1 重启master节点

依旧无效,而且,重启后,需要等好一会,直到systemctl -l | grep dcos的服务都已经起来了。

2.2 查看操作系统日志

通过日志定位到服务dcos-auth

2024-03-08T03:05:27.png

2.3 查看dcos-oauth服务日志

该服务与dcos.auth0.com通信异常。

2024-03-08T03:05:07.png

2.4 使用curl验证

依旧无效。可以ping,可以访问80,但是无法访问443。
2024-03-08T03:04:07.png

2.5 使用us的vps测试正常

2024-03-08T03:04:43.png

2.6 检查dcos-oauth运行状态

好在dcos-oauth等服务不是使用的容器,可以直接在虚拟机里面配置hosts指向us vps,然后us vps使用rinetd跳转到auth0.com服务。

2.7 部署实现

2024-03-08T03:03:34.png

2024-03-08T03:04:23.png

三、总结

这种hosts+rinetd方案可行,但是有点消耗资源,rinetd服务所在机器的443端口是废了。
还有没有其他方案呢。

四、使用自建证书+反向代理

4.1 生成根证书

openssl genrsa -out myCA.key 2048

4.2 使用私钥创建根证书(自签名)

openssl req -x509 -new -nodes -key myCA.key -sha256 -days 1024 -out myCA.pem

4.3 为你的域名创建证书签名请求(CSR)

openssl genrsa -out dcos.auth0.com.key 2048

4.4 创建一个证书请求

openssl req -new -key dcos.auth0.com.key -out dcos.auth0.com.csr

4.5 使用你的根CA签发域名证书

(1)创建一个dcos.auth0.com.ext来定义证书的使用

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = dcos.auth0.com
DNS.2 = *.auth0.com
DNS.3 = auth0.com

(2)使用你的CA和CSR来签发证书

openssl x509 -req -in dcos.auth0.com.csr -CA myCA.pem -CAkey myCA.key -CAcreateserial -out dcos.auth0.com.crt -days 500 -sha256 -extfile dcos.auth0.com.ext

(3)最终获得的文件

myCA.key:你的根CA的私钥。
myCA.pem:你的根CA证书。
dcos.auth0.com.key:你的域名的私钥。
dcos.auth0.csr:你的域名的证书签名请求。
dcos.auth0.crt:你的域名的由你自己的CA签发的证书。

你可以在服务器配置中使用dcos.auth0.com.key(私钥)和dcos.auth0.com.crt(签发的证书)来启用HTTPS。注意,因为这个CA不是一个公认的权威机构,用户首次访问使用这个证书的网站时,他们的浏览器可能会显示一个警告。你可以通过将你的根CA证书(myCA.pem)导入到用户的浏览器来解决这个问题,以避免警告信息,但这通常只适用于内部网络或测试环境。

4.6 部署部署到WEB服务器

在hk的bt面板,部署dcos.auth0.com站点,配置刚刚生成的相关证书。

2024-03-08T03:25:13.png

4.7 验证

(1)验证的时候,虽然curl通过,但是dcos-oauth服务访问的时候,还是会报错
2024-03-08T05:10:57.png

(2)查看dcos-oauth服务程序配置

[root@localhost ~]# systemctl status dcos-oauth
● dcos-oauth.service - DC/OS Authentication (OAuth): authenticates DC/OS users using OpenID Connect and Auth0
   Loaded: loaded (/opt/mesosphere/packages/dcos-oauth--0079529da183c0f23a06d2b069721b6fa6cc7b52/dcos.target.wants_master/dcos-oauth.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2024-03-08 09:41:49 CST; 3h 29min ago
  Process: 5787 ExecStartPre=/opt/mesosphere/bin/bootstrap dcos-oauth (code=exited, status=0/SUCCESS)
 Main PID: 5851 (dcos-oauth)
   Memory: 16.3M
   CGroup: /system.slice/dcos-oauth.service
           └─5851 /opt/mesosphere/bin/dcos-oauth serve --addr=127.0.0.1:8101 --zk-addr=127....

2024-03-08T05:12:45.png

(3)果然,dcos自带了jre,
2024-03-08T05:14:28.png

cd /opt/mesosphere/packages/java--cd5e921ce66b0d3303883c06d73a657314044304/usr/java/jre/bin
./java -version

2024-03-08T05:15:06.png

(4)导入证书到jre的cacerts文件

cd /opt/mesosphere/packages/java--cd5e921ce66b0d3303883c06d73a657314044304/usr/java/jre/lib/security/
../../bin/keytool -import -trustcacerts -alias myCA -file myCA.pem -keystore cacerts -storepass changeit

2024-03-08T05:26:17.png

systemctl restart dcos-oauth

(5)可以登录了
2024-03-08T05:27:51.png

(6)日志显示正常
2024-03-08T05:28:05.png

(7)画张拓扑
2024-03-08T05:32:05.png

五、后记

(1)这次行动将之前准备的ssl证书、jdk相关的知识全都用上了。
(2)自签名证书对于对抗互联网中的一些异常服务还是有效果的。对于docker容器,github这种,如果我们可以采用自签名证书的方式,将docker.io和github.com相关的域名全都解析到我们的服务器,然后本地导入我们的自建CA证书,就可以提升使用效果了。
(3)如果加上自建DNS,将这些域名解析到我们自己的服务器,就更好了。
(4)如果加上VPN,分配给终端自己的DNS服务器,效果也会进一步提升。
(5)最后,增加了uptime+kuma实现对oauth0.com的监控。等待是否可以恢复正常。
2024-03-08T05:42:53.png

追加

当时后来又加入了uptime-kuma针对auth0.com的监控,发现时断时续。
2024-03-15T01:07:44.png
2024-03-15T01:08:38.png

最后修改:2024 年 05 月 11 日
如果觉得我的文章对你有用,请随意赞赏