小编Geo*_*rré的帖子

Kubernetes Pod无法从容器注册表(gcp)中提取图像

我想用一个存在于'eu.gcr.io'(相同项目)上的新映像来更新我在kubernetes上的部署,我之前已经做过。但是现在,吊舱无法拉动图像,因为它们无权这样做。这是我们在pod日志中得到的错误。

Failed to pull image "eu.gcr.io/my-gcp-project/my-image:v1.009": 
rpc error: code = Unknown desc = Error response from daemon: 
unauthorized: You don't have the needed permissions to perform this operation,
and you may have invalid credentials.
Run Code Online (Sandbox Code Playgroud)

群集上的服务帐户具有kubernetes admin和storage admin角色,这应该足够。但是,即使我制作了服务帐户项目编辑器(出于调试目的),它仍然不起作用(相同的错误)。

我也尝试过创建一个新的新集群(默认设置)并在那里应用我的部署,但是随后出现了完全相同的问题。

我不确定我可以尝试什么。

任何帮助或建议,我们将不胜感激。

编辑:

我只是发现我仍然可以拉出并部署旧映像。但是,我创建的每个新映像都不能被kubernetes容器所吸引。

google-cloud-platform kubernetes google-kubernetes-engine google-container-registry google-iam

11
推荐指数
1
解决办法
1103
查看次数

没有 Nodeport 的 Kubernetes 入口控制器

我们在 GKE(谷歌 kubernetes 引擎)上运行 API 服务器。我们使用 Google Cloud Endpoints 和 API 密钥处理我们的授权。我们将每个 API 密钥的某些 IP 地址列入白名单。为了完成这项工作,我们必须从负载均衡器转换为入口控制器,以暴露我们的 API 服务器。IP 白名单不适用于负载均衡器服务。现在我们有一个类似于这样的入口设置:

apiVersion: v1
kind: Service
metadata:
  name: echo-app-nodeport
spec:
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP
    name: http
  selector:
    app: esp-echo
  type: NodePort
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: echo-app-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: "RESERVED_IP"
    kubernetes.io/ingress.allow-http: "false"
spec:
  tls:
  - secretName: SECRET_NAME
  backend:
    serviceName: echo-app-nodeport
    servicePort: 80
Run Code Online (Sandbox Code Playgroud)

此设置运行良好,IP 白名单工作正常。现在我关心的主要是 NodePort,它似乎需要让入口控制器工作。我阅读了多个来源[1] [2],强烈建议不要使用 NodePorts 来公开您的应用程序。然而,我发现的大多数示例都使用了这个 NodePort + Ingress 组合。我们可以安全地使用此设置还是应该迁移到其他入口控制器(NGINX、Traefik 等)?

kubernetes google-kubernetes-engine kubernetes-ingress

7
推荐指数
1
解决办法
320
查看次数