当我散步流言集群部署postgres, kubernetes api的api调用失败,因为它并不信任kubernetes api证书。我怎么能让percona po雷竞技下载官网stgres相信我的kuberntes api证书吗?

这是我的错误。

2022-07-06 20:31:11,485警告:重试(重试(总= 0,连接= None,阅读=没有重定向= 0,状态= None))连接破碎后的SSLError (SSLError (1’(SSL: CERTIFICATE_VERIFY_FAILED)证书验证失败(_ssl.c: 897)”),)”: / api / v1 /命名空间/ pg3 /舱吗?labelSelector =供应商% 3 dcrunchydata % 2 ccrunchy-pgha-scope % 3 dpostgres 2022-07-06 20:31:11,487警告:重试(重试(总= 0,连接=没有阅读=没有重定向= 0,状态= None))连接破碎后的SSLError (SSLError (1’(SSL: CERTIFICATE_VERIFY_FAILED)证书验证失败(_ssl.c: 897)”),)”: / api / v1 /命名空间/ pg3 / configmaps吗?labelSelector =供应商% 3 dcrunchydata % 2 ccrunchy-pgha-scope % 3 dpostgres 2022-07-06 20:31:11,494错误:https://100.64.0.1:443请求到服务器失败:MaxRetryError (“HTTPSConnectionPool(主机= 100.64.0.1,端口= 443):马克斯重试超过url: / api / v1 /命名空间/ pg3 /舱吗?labelSelector =供应商% 3 dcrunchydata % 2 ccrunchy-pgha-scope % 3 dpostgres (SSLError所致(SSLError (1’(SSL: CERTIFICATE_VERIFY_FAILED)证书验证失败(_ssl.c: 897)”),))”), 2022-07-06 20:31:11,495错误:https://100.64.0.1:443请求到服务器失败:MaxRetryError (“HTTPSConnectionPool(主机= 100.64.0.1,端口= 443):马克斯重试超过url: / api / v1 /命名空间/ pg3 / configmaps吗?labelSelector =供应商% 3 dcrunchydata % 2 ccrunchy-pgha-scope % 3 dpostgres (SSLError所致(SSLError (1’(SSL: CERTIFICATE_VERIFY_FAILED)证书验证失败(_ssl.c: 897)”),))”), 2022-07-06 20:31:11,804错误:get_cluster回溯(最近的电话最后):文件“/ usr / lib / python3.6 /网站/ patroni / dcs / kubernetes。py”, 704行,在_load_cluster self._wait_caches (stop_time)文件“/ usr / lib / python3.6 /网站/ patroni / dcs / kubernetes。py”, 696行,_wait_caches提高RetryFailedError patroni.utils(“超过重试期限”)。RetryFailedError:“超过重试期限”2022-07-06 20:31:11,804警告:得不到集群从dcs 2022-07-06 20:31:12,495错误:ObjectCache.run TypeError(“不支持的操作数类型(s) -:“NoneType”和“浮动”,)2022-07-06 20:31:12,496错误:ObjectCache.run TypeError(“不支持的操作数类型(s) -:“NoneType”和“浮动”,)2022-07-06 20:31:12,502警告:重试(重试(总= 0,连接=没有阅读=没有重定向= 0,状态= None))连接破碎后的SSLError (SSLError (1”(SSL: CERTIFICATE_VERIFY_FAILED)证书验证失败(_ssl.c: 897)”),)”: / api / v1 /命名空间/ pg3 /豆荚? labelSelector =供应商% 3 dcrunchydata dpostgres % 2 ccrunchy-pgha-scope % 3
3喜欢

我认为这个问题是由于以下不受信任的证书颁发机构。为什么perc雷竞技下载官网ona kubernetes证书颁发机构不信任?对我来说似乎是一个基本要求。下面的证书应该是可信的。

/var/run/secrets/kubernetes.io / serviceaccount / ca.crt

作为一个基本的例子,如果我叫kubernetes api与旋度,它将失败与证书错误,预计因为kubernetes默认证书颁发机构不受信任的豆荚。

curl https://kubernetes.default
旋度(60):SSL证书的问题:自签署证书证书链中更多的细节:https://curl.haxx.se/docs/sslcerts。html旋度未能验证服务器的合法性,因此无法建立一个安全连接。为了了解更多关于这种情况以及如何修复它,请访问网页上面提到的。

为了调用kubernetes api的我需要明显地信任kubernetes证书颁发机构。我能做这与旋度以下的例子。

curl https://kubernetes.default——cacert /var/run/secrets/kubernetes.io / serviceaccount / ca.crt

这一事实percona调用k雷竞技下载官网ubernetes api并不信任/var/run/secrets/kubernetes.io / serviceaccount / ca.crt证书是为特定的集群设置创建大问题,特别是在我的例子中散步流言集群。

需要采取哪些步骤来确保percona api调用kubernets信任此证书雷竞技下载官网权威吗?

1像

因为我不能复制证书readOnlyRootFilesystem启用。某人percona团队能解决这个问题。雷竞技下载官网这是一个至关重要的拦截器好几人。

1像

@Clay_Risser,

我花了一些时间来理解你描述的问题,但仍然很难。通常的工具与Kubernetes API服务器添加此服务帐户CA证书信任池。例如:

client-go:

func InClusterConfig()(*配置错误){常量(tokenFile = " / var /运行/机密/ kubernetes。io / serviceaccount /令牌" rootCAFile = " / var /运行/机密/ kubernetes.io / serviceaccount / ca。crt)主机、端口:= os.Getenv (“KUBERNETES_SERVICE_HOST”), os.Getenv (“KUBERNETES_SERVICE_PORT”)如果len(主机)= = 0 | | len(港口)= = 0{返回nil, ErrNotInCluster}牌,犯错:= ioutil.ReadFile (tokenFile)如果犯错! = nil{返回nil,犯错}tlsClientConfig: = tlsClientConfig{}如果_,犯错:= certutil.NewPool (rootCAFile);犯错! = nil {klog。Errorf(“将从% s加载根CA配置,但有犯错:% v”, rootCAFile,犯错)}{tlsClientConfig。CAFile = rootCAFile}返回配置{/ / TODO:切换到使用集群DNS。主持人:“https://”+净。JoinHostPort(主机、端口),TLSClientConfig: TLSClientConfig, BearerToken:字符串(令牌),BearerTokenFile: tokenFile,}, nil}

patroni:

def load_incluster_config(自我、ca_certs = SERVICE_CERT_FILENAME token_refresh_interval = datetime.timedelta(分钟= 1):如果SERVICE_HOST_ENV_NAME不在操作系统。环境或SERVICE_PORT_ENV_NAME不是操作系统。环境:提高自我。ConfigException(“服务主机/端口没有设置”。)如果不是操作系统。环境(SERVICE_HOST_ENV_NAME)操作系统。环境[SERVICE_PORT_ENV_NAME]:提高自我。ConfigException(“服务主机/端口设置但空。)如果不是os.path.isfile (ca_certs):提高自我。ConfigException(“服务证书文件并不存在。”)与开放(ca_certs) f:如果不是f.read():提高自我。ConfigException (Cert文件存在,但空。)自我。pool_config [' ca_certs '] = ca_certs自我。_token_refresh_interval = token_refresh_interval牌= self._read_token_file () self._make_headers(令牌=令牌)的自我。_server = uri (“https”(操作系统。环境(SERVICE_HOST_ENV_NAME) os.environ [SERVICE_PORT_ENV_NAME]))

感觉像是在集群中可能是错的。你能分享更多细节关于你的设置吗?你为什么认为集群安装吗散步流言很容易这样的错误呢?

1像

嗯,我不确定。我将试着挖到更多。如果你有任何建议,请让我知道。我相信我的散步流言集群设置正确,因为下面的命令运行没有错误。

curl https://kubernetes.default——cacert /var/run/secrets/kubernetes.io / serviceaccount / ca.crt
1像

@Ege_Gunes我刚注意到你看错文件了。确保你看Patroni 2.1.1因为这是Patroni版本percona Postgres运营商1.2.0使用。雷竞技下载官网

1像

这正是它是失败的。

1像

好像下面的问题是密切相关的。

1像

以下问题也是相关的。

1像

一个相关的问题。

1像

@Ege_Gunes我发现它不工作的原因是python不相信中级证书,和散步流言产生的ca是一个中级证书。

任何人有任何想法如何防止散步流言创建中级证书?

1像

@Ege_Gunes我刚刚安装了percona pg运营商2.2.0雷竞技下载官网然后我创建了一个集群pg-db舵图。实例失败开始,因为未能验证kubernetes api证书
使用一个中间Kubernetes CA所以我认为问题是一样的我的线程。
我想知道如果我可以提供完整的CA链可以工作吗?我还没有看到选项crd pg豆荚挂载卷。你能建议如何解决这个问题?