kubernetes - Terraform dial tcp 192.xx.xx.xx:443: i/o timeout error
问题描述
我正在尝试使用 GitLab + Terraform 实施 CI / CD 到 K8S 集群,并且在CentOS上设置了 K8S 控制平面(主节点)
但是,管道作业失败并出现以下错误
Error: Failed to get existing workspaces: Get "https://192.xx.xx.xx/api/v1/namespaces/default/secrets?labelSelector=tfstate%3Dtrue": dial tcp 192.xx.xx.xx:443: i/o timeout
从上面提到的错误(default/secrets?labelSelector=tfstate%3Dtrue
)中,我假设错误与默认命名空间上缺少“terraform secret”有关
示例(从我的 Windows 获取的 Terraform 机密)
PS C:\> kubectl get secret
NAME TYPE DATA AGE
default-token-7mzv6 kubernetes.io/service-account-token 3 27d
tfstate-default-state Opaque 1 15h
但是,我不确定哪个进程会创建“tfsecret”,还是我们应该手动创建它?
请让我知道我的理解是否错误以及我是否遗漏了其他任何内容
编辑
出现上述问题是因为现有的 Gitlab-runner 在不同的子网上(例如 172.xx.xx.xx 而不是 192.xx.xx.xx)
我被要求使用在同一子网上运行的不同 Gitlab-runner,现在它抛出以下错误
Error: Failed to get existing workspaces: Get "https://192.xx.xx.xx:6443/api/v1/namespaces/default/secrets?labelSelector=tfstate%3Dtrue": x509: certificate signed by unknown authority
现在,我有点困惑证书问题是介于两者之间GitLab-Runner and Gitlab-Server
还是 Gitlab-Server and K8S Cluster
其他
解决方案
您已将 Kubernetes 配置为 Terraform 配置的远程状态后端。错误是,后端正在尝试查询现有机密以确定配置了哪些工作空间。表示远程状态后端使用的x509: certificate signed by unknown authority
KUBECONFIG 与您要连接的 API 服务器的 CA 不匹配。
如果运行器本身是 K8s pod,请确保您提供与目标集群匹配的 KUBECONFIG,并且远程状态不会in-cluster
通过读取每个 K8s pod 具有的服务帐户令牌来配置自身 - 在大多数情况下,这仅适用于集群吊舱正在运行。
您没有提供足够的信息来更具体。但从大局来看,您必须配置状态后端,以及连接到 K8s 的任何提供程序。理论上,状态后端机密和 K8s 资源不必在同一个集群上。这意味着,您可能必须对状态后端和 K8s 提供程序进行不同的配置。
推荐阅读
- ios - 如何在应用购买订阅 ios 中显示保存百分比?
- reactjs - 如何在功能组件中动态更改字体系列?
- c# - 使用 c# 更改 Windows 键盘布局
- java - How to use iText get pdf rendered with multiple fonts
- c++17 - 如何通过值或常量引用传递 std::string_view
- arrays - React - 映射嵌套的json而不是数组
- python - 是否可以在 pyhton 脚本中运行 OWS(橙色文件)或将其转换为 .py
- python - Pymongo:如何终止长时间运行的操作?
- android - 在离子 apk 中使用 angular/common/http 调用 Api 失败
- c++ - 如何检索 Active Directory 组的每个父组