头盔从吊舱内部通过“ x509:由未知授权机构签名的证书”提取错误

时间:2019-11-29 10:44:36

标签: kubernetes kubernetes-helm client-go

我正在尝试使用client-go编写一个掌舵运算符,并希望使用 RepoURL chartname 从控制器中获取图表。我已经编写了一个示例代码,在本地计算机上运行得很好。但是当我在容器中运行相同的代码时,相同的代码会引发错误。请找到以下代码:

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证书,但是由于我已初始化没有tls证书的头盔,因此我不确定是哪个ca证书。

我还试图在容器内复制头盔二进制文件并尝试运行:

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.

我在那里也面临着同样的问题。有人遇到过类似的问题吗?

1 个答案:

答案 0 :(得分:1)

不,我没有看到这个问题。

通知:域kubernetes-charts.storage.googleapis.com的证书是由已知的CA(Google信任服务)颁发的。因此,就像charts.bitnami.com(由Amazon CA发布)那样,您只需要调试一点即可看到:

    在吊舱内访问时,哪个CA向该域颁发证书。例如,运行命令curl -vI https://charts.bitnami.com/(如果实际使用的是证书发行者),则可能需要更新容器的基本映像,以包括已更新的已知CA证书。如果不是(例如,charts.bitnami.com的证书是自签名的),则这是典型的DNS中毒(吊舱的名称服务器将上述域解析为不同的域)
  1. 检查主机的名称服务器。如果您不信任k8s worker DNS,则可以为Pod自定义名称服务器。参见https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/