尝试从Docker容器访问Kubernetes API的问题

时间:2019-04-19 09:03:10

标签: docker asp.net-core kubernetes

我正面临问题。我正在尝试从Docker容器(创建的.NetCore)访问Kubernetes API。我收到错误消息“连接被拒绝”

有人可以帮忙吗? 我会很感激的。

using (HttpClient client = new HttpClient()) {
  var request_json = JsonConvert.SerializeObject(obj).ToString();
  var content = new StringContent(request_json, Encoding.UTF8, "application/json");
  client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "Token");
  client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
  client.DefaultRequestHeaders.Connection.Add("close");
  var result = await client.PostAsync("http://127.0.0.1:8001/apis/batch/v1/namespaces/default", content);
  var result_string = await result.Content.ReadAsStringAsync()`enter code here`;
  return result_string.ToString();
}

1 个答案:

答案 0 :(得分:1)

如果您的Docker容器在kubernetes集群中运行,则可以通过服务访问kubernetes API。在默认的名称空间中,服务已经以kubernetes的形式提供,因此连接URL为https://kubernetes/

如果您在本地运行docker容器并想使用kubectl proxy访问kubernetes api,则docker容器必须在没有网络隔离的情况下运行,以便能够访问本地代理端口:{{1 }}。仅当您使用Linux,在MacOS或Windows上使用虚拟机托管Docker容器且docker run --net=host是VM而不是台式机时,此方法才有效。然后,您将使用特殊的主机名localhostdocker.for.mac.host.internal之一,但是您将需要相应地启动kubectl-proxy来侦听不仅在回送网络接口上,因为请求将来自docker-vm,它是外部的。

BTW:如果您使用的是kubectl-proxy,它将自动对请求进行身份验证,而无需添加承载令牌。