Helm 使用 "x509: certificate signed by unknown authority" 从 pod 中取出错误
Helm fetch errors out with "x509: certificate signed by unknown authority" from inside the pod
我正在尝试使用 client-go 编写 helm 操作员,并希望使用 RepoURL 和 chartname[=26 从我的控制器中获取图表=].我已经编写了一段示例代码,它在我的本地机器上运行得非常好。但是当我 运行 容器内的相同代码时,相同的代码会抛出错误。请找到以下代码:
func FetchURL() error {
repoURL := "https://kubernetes-charts.storage.googleapis.com"
username := ""
password := ""
var settings environment.EnvSettings
flags := pflag.NewFlagSet("helm-env", pflag.ContinueOnError)
settings.AddFlags(flags)
settings.Init(flags)
getters := getter.All(settings)
getters := getter.All(settings)
var err error
destDir, err := ioutil.TempDir("", "helm-")
if err != nil {
return fmt.Errorf("Failed to untar: %s", err)
}
defer os.RemoveAll(destDir)
chartURL, err := repo.FindChartInAuthRepoURL(repoURL, username, password, chartRef, "", "", "", "", getter.All(settings))
if err != nil {
return fmt.Errorf("Error finding the Chart URL: %s", err)
}
fmt.Println(chartURL)
return nil
}
上述函数在获取 chartURL 时抛出以下错误:
Fetching Chart
Error finding the Chart URL: Looks like "https://kubernetes-charts.storage.googleapis.com" is not a valid chart repository or cannot be reached: Get https://kubernetes-charts.storage.googleapis.com/index.yaml: x509: certificate signed by unknown authority
我知道它要求一些 ca 证书,但我不确定是哪个 ca 证书,因为我在没有 tls 证书的情况下初始化了 helm。
我还尝试复制 pod 中的 helm 二进制文件并尝试 运行:
helm init --client-only
helm repo update
Hang tight while we grab the latest from your chart repositories...
...Skip local chart repository
...Unable to get an update from the "stable" chart repository (https://kubernetes-charts.storage.googleapis.com):
Get https://kubernetes-charts.storage.googleapis.com/index.yaml: x509: certificate signed by unknown authority
...Unable to get an update from the "bitnami" chart repository (https://charts.bitnami.com/bitnami):
Get https://charts.bitnami.com/bitnami/index.yaml: x509: certificate signed by unknown authority
Update Complete.
我也遇到了同样的问题。有人遇到过类似问题吗?
不,我没有看到这个问题。
注意:域kubernetes-charts.storage.googleapis.com
的证书由已知CA(Google信任服务)颁发。所以作为charts.bitnami.com
(由Amazon CA发行),所以你只需要稍微调试一下就可以看到:
- 在 pod 内访问时,哪个 CA 向该域颁发证书。例如,运行 命令
curl -vI https://charts.bitnami.com/
如果证书颁发者是它应该的样子,您可能需要更新 pod 的基础映像以包含更新的已知 CA 证书。如果不是(例如,charts.bitnami.com
的证书是自签名的),这是典型的 DNS 中毒(pod 的名称服务器将上述域解析为不同的域)
- 检查您的 pod 的名称服务器。如果您不信任 k8s worker DNS,您可以为您的 pod 自定义名称服务器。见 https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/
我正在尝试使用 client-go 编写 helm 操作员,并希望使用 RepoURL 和 chartname[=26 从我的控制器中获取图表=].我已经编写了一段示例代码,它在我的本地机器上运行得非常好。但是当我 运行 容器内的相同代码时,相同的代码会抛出错误。请找到以下代码:
func FetchURL() error {
repoURL := "https://kubernetes-charts.storage.googleapis.com"
username := ""
password := ""
var settings environment.EnvSettings
flags := pflag.NewFlagSet("helm-env", pflag.ContinueOnError)
settings.AddFlags(flags)
settings.Init(flags)
getters := getter.All(settings)
getters := getter.All(settings)
var err error
destDir, err := ioutil.TempDir("", "helm-")
if err != nil {
return fmt.Errorf("Failed to untar: %s", err)
}
defer os.RemoveAll(destDir)
chartURL, err := repo.FindChartInAuthRepoURL(repoURL, username, password, chartRef, "", "", "", "", getter.All(settings))
if err != nil {
return fmt.Errorf("Error finding the Chart URL: %s", err)
}
fmt.Println(chartURL)
return nil
}
上述函数在获取 chartURL 时抛出以下错误:
Fetching Chart
Error finding the Chart URL: Looks like "https://kubernetes-charts.storage.googleapis.com" is not a valid chart repository or cannot be reached: Get https://kubernetes-charts.storage.googleapis.com/index.yaml: x509: certificate signed by unknown authority
我知道它要求一些 ca 证书,但我不确定是哪个 ca 证书,因为我在没有 tls 证书的情况下初始化了 helm。
我还尝试复制 pod 中的 helm 二进制文件并尝试 运行:
helm init --client-only
helm repo update
Hang tight while we grab the latest from your chart repositories...
...Skip local chart repository
...Unable to get an update from the "stable" chart repository (https://kubernetes-charts.storage.googleapis.com):
Get https://kubernetes-charts.storage.googleapis.com/index.yaml: x509: certificate signed by unknown authority
...Unable to get an update from the "bitnami" chart repository (https://charts.bitnami.com/bitnami):
Get https://charts.bitnami.com/bitnami/index.yaml: x509: certificate signed by unknown authority
Update Complete.
我也遇到了同样的问题。有人遇到过类似问题吗?
不,我没有看到这个问题。
注意:域kubernetes-charts.storage.googleapis.com
的证书由已知CA(Google信任服务)颁发。所以作为charts.bitnami.com
(由Amazon CA发行),所以你只需要稍微调试一下就可以看到:
- 在 pod 内访问时,哪个 CA 向该域颁发证书。例如,运行 命令
curl -vI https://charts.bitnami.com/
如果证书颁发者是它应该的样子,您可能需要更新 pod 的基础映像以包含更新的已知 CA 证书。如果不是(例如,charts.bitnami.com
的证书是自签名的),这是典型的 DNS 中毒(pod 的名称服务器将上述域解析为不同的域) - 检查您的 pod 的名称服务器。如果您不信任 k8s worker DNS,您可以为您的 pod 自定义名称服务器。见 https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/