我通过 Google Compute Engine 中的 Bitnami 创建了一个 VM。以前,我可以通过 Bitnami Web 界面进行 ssh。我试图通过 Mac 上的终端 ssh,但一直收到Permission denied (publickey)
错误消息。然后我删除了服务器和我的 Mac 上的所有密钥,并从 bitnami 下载了 pem 文件并使用-i
了连接选项,但问题仍然存在。
ssh -i bitnami-gce.pem xxx@1xx.1xx.5x.1xx -v
Run Code Online (Sandbox Code Playgroud)
完整的调试信息:
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: Connecting to 1xx.1xx.5x.1xx [1xx.1xx.5x.1xx] port 22.
debug1: Connection established.
debug1: identity file bitnami-gce.pem type -1
debug1: identity file bitnami-gce.pem-cert type -1
debug1: Enabling compatibility mode for protocol …
Run Code Online (Sandbox Code Playgroud) debian ssh ssh-keys google-compute-engine google-cloud-platform
我的环境:
# uname -a
Linux app11 4.9.0-5-amd64 #1 SMP Debian 4.9.65-3+deb9u2 (2018-01-04) x86_64 GNU/Linux
#
# cat /etc/*release
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
#
Run Code Online (Sandbox Code Playgroud)
在尝试运行时apt-get update
,我收到了一堆错误:
# apt-get update
Ign:1 http://deb.debian.org/debian stretch InRelease
Hit:2 http://security.debian.org stretch/updates InRelease
Hit:3 http://deb.debian.org/debian stretch-updates InRelease
Hit:4 http://deb.debian.org/debian stretch-backports InRelease
Hit:5 http://deb.debian.org/debian stretch Release
Get:6 http://packages.cloud.google.com/apt cloud-sdk-stretch InRelease [6,377 B]
Ign:7 https://artifacts.elastic.co/packages/6.x/apt stable InRelease
Hit:8 https://artifacts.elastic.co/packages/6.x/apt stable Release
Get:9 http://packages.cloud.google.com/apt google-compute-engine-stretch-stable InRelease [3,843 B]
Get:10 …
Run Code Online (Sandbox Code Playgroud) 我使用 Google Kubernetes Engine 按需运行 Pod。每个 pod 都使用 nodeport 服务公开暴露在互联网上。
我正在 GKE 中寻找一种方法来获取出站连接的单个 IP 或 IP 范围,将它们提供给第三方 API 以将它们列入白名单。
当节点自动缩放或升级它们时,GKE 节点 IP 是不可管理的。我需要一种方法来保持一致的出站 IP。
我曾尝试使用一个简单的 NAT 网关到 Kubernetes 节点(使用这里的示例),虽然这将出站连接路由到 NAT 网关,但它会中断到 Pod(Nodeport 服务)的入站流量,因为它们在NAT 网关。
是否有谷歌云区域的默认 IP 范围,我可以将其提供给第三方以列入白名单(或)
如果 GKE 提供了一种从静态 IP(或)预先保留的列表中选择节点外部 IP 的方法
有没有其他方法可以实现拥有单个静态 IP 或代表来自 Pod 的出站流量的 IP 范围
我发现像类似的问题这样,但使用NAT时休息,他们并没有解决我的问题,因为豆荚应该是外部连接。
目前我正在做一个小型的爱好项目,一旦它准备好,我就会开源。此服务在 Google Container Engine 上运行。我选择 GCE 是为了避免配置麻烦,成本可以承受并学习新东西。
我的 pod 运行良好,我创建了一个类型LoadBalancer
的服务来在端口 80 和 443 上公开服务。这完美地工作。
但是,我发现对于每个LoadBalancer
服务,都会创建一个新的 Google Compute Engine 负载均衡器。这个负载均衡器非常昂贵,并且对于单个实例上的业余项目来说真的做得太过分了。
为了降低成本,我正在寻找一种无需负载平衡器即可公开端口的方法。
到目前为止我尝试过的:
部署NodePort
服务。不幸的是,不允许公开低于 30000 的端口。
部署一个 Ingress,但这也会创建一个负载均衡器。
试图禁用HttpLoadBalancing
(https://cloud.google.com/container-engine/reference/rest/v1/projects.zones.clusters#HttpLoadBalancing)但它仍然创建了一个负载平衡器。
有没有办法在没有负载均衡器的情况下为 Google Container Engine 上的单个实例公开端口 80 和 443?
我花了过去 3 个小时寻找发布 Google Compute Engine API 使用中 IP 地址的方法,因为我使用了 8/8。我用谷歌搜索,阅读手册,但无法在控制台的任何地方发布它。我正在尝试设置一个 Rails 应用程序。编译时遇到错误,因为我没有为 DB 提供正确的套接字(这在这里并不重要)。当卡住时,我在终端中按 Ctrl+C 释放,我认为这是问题所在。- 我是 Google Cloud 的新手,因此我只能假设。
错误信息:
ERROR: (gcloud.app.deploy) Error Response: [400] The following quotas were exceeded: IN_USE_ADDRESSES (quota: 8, used: 8 + needed: 2).
https://appengine.googleapis.com/v1/apps/workepics/services/default/versions?alt=json
Run Code Online (Sandbox Code Playgroud)
当我在控制台中单击计算引擎时,只会询问我是否要创建一个。没有其他选择。
任何帮助,将不胜感激!谢谢你。
我有一个大而繁忙的网站;它目前完全在我每个月租用约 700 美元的专用服务器上运行。
它包含三个部分,我认为我可以将其划分为云解决方案:
媒体(图像/视频)文件托管。目前我有类似 236 GB 的静态图像,目前都只是停在我的服务器上。如果我将这些移动到云中,我可能会与 CDN 结合使用(以最小化每个图像请求从云服务传输数据的成本)。
数据库。目前在我的服务器上运行 MySQL,大约有 3 GB 的数据。
网络服务器。同一台服务器运行 nginx 服务静态文件和 PHP。
我现在没有任何生产问题,但我希望我的网站明年的流量/服务器负载翻一番。所以我现在想考虑可扩展性。
我的问题是:我如何确定将任何/所有这些移动到云平台上是否具有成本效益,而不是将它们保留在我当前的服务器上?
(我已经知道其他一些因素:使用云进行备份会更容易,我不会像现在使用单台服务器那样出现单点故障等。但我不知道有多少拆分其中一项服务的成本更多/更少。我该如何计算?)
编辑 - 谢谢大家这些惊人的答案和评论。一些人要求提供更多信息,因此我总结了以下所有内容并添加了更多数据:
已使用数据传输(“带宽”) - 该站点每月发送约 17 TB 的出站数据(!),我计划明年将这个数字增加一倍(!!)。几乎所有这些出站都是静态媒体(图片和视频剪辑),所以也许 CDN 是个好主意,不仅可以提高可发现性,而且可以将所有数据传输到 CDN 网络的负担转移到 CDN 网络,因此媒体存储服务器没有那么多的数据直接传输。--编辑:对于这么多数据传输来说,CDN 似乎非常昂贵。所以也许静态媒体留在一个简单的服务器上,这给了我一个非常高的带宽上限(你好 OVH!),如果我能找到一种经济有效的方法将 CDN 放在它前面,那就太棒了。
流量不尖- 我的流量相当稳定;我转向更基于云的解决方案的目标是能够轻松扩展。即我当前的设置在一个硬盘驱动器上包含所有内容,并且驱动器已满 60%;这个基础设施实际上无法处理双倍的数据量(而且我不确定它是否有足够的计算能力以双倍的流量运行 Web 服务器和数据库服务器)。
静态媒体- 正如我上面提到的,我有大约 236 GB 的静态媒体,主要是所有图像和视频剪辑。这似乎是最明显的(也许是最简单的?)首先切割并放入云中的部分。
数据库- 虽然数据库现在运行良好,但我很快就会有一些更复杂的查询,并且喜欢那里更强大的东西的想法。因此,虽然我不认为我当前的需求(功率和数据量)决定我应该将数据库服务器移到云中,但这一切都是为了能够扩展。
繁忙时间- 我的网站上总是有至少1,000 名用户 24/7,贪婪地消费媒体。服务器从不空闲。
目前专用服务器- 我之前说错了,说它是 colo(暗示我拥有硬件)。那是错误的。我有一个我每个月租用的专用服务器(由我的托管公司所有)。区别不大,只是想提一下。
我在一个key.json
文件中有一个 ssh 私钥,我想使用此凭据通过 gsutil 访问存储桶。
我似乎找不到任何关于如何包含 json 密钥作为身份验证方法的信息,只有“私有”和“秘密”字段。
文件结构为:
{
"private_key_id":
"private_key": "-----BEGIN PRIVATE KEY-- ...
"client_email":
"client_id":
"type": "service_account"
}
Run Code Online (Sandbox Code Playgroud)
我如何使用gsutil
该文件?
在将Flask应用程序部署到Google Cloud Platform时,我收到此错误:
[ERROR] Exception in worker process from itsdangerous import json as _json ImportError: cannot import name 'json' from 'itsdangerous'
2022-02-18 08:00:30 default[20220218t132659] Traceback (most recent call last):
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/gunicorn/arbiter.py", line 589, in spawn_worker
worker.init_process()
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/gunicorn/workers/gthread.py", line 92, in init_process
super().init_process()
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/gunicorn/workers/base.py", line 134, in init_process
self.load_wsgi()
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/gunicorn/workers/base.py", line 146, in load_wsgi
self.wsgi = self.app.wsgi()
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
self.callable = self.load()
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 58, in load
return self.load_wsgiapp() …
Run Code Online (Sandbox Code Playgroud) 我正在使用 Google Kubernetes Engine 部署一个网络应用程序,我想通过负载均衡器在我作为 Google Cloud Platform 中同一项目的一部分控制的现有静态 IP 地址上访问它,因为我想使用域名已经指向这个IP。
我用于 pod 的 yaml 文件是:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
labels:
app: my-app
spec:
containers:
- name: my-container
image: gcr.io/my-project/my-app:latest
Run Code Online (Sandbox Code Playgroud)
我可以使用以下方法设置负载平衡器:
apiVersion: v1
kind: Service
metadata:
name: my-load-balancer
spec:
ports:
- port: 80
targetPort: 80
selector:
app: my-app
type: LoadBalancer
Run Code Online (Sandbox Code Playgroud)
这提供了一个可以访问应用程序的外部 IP,但我找不到任何方法来配置它以使用我想要的 IP。该服务的文件提到了spec.clusterIP设置,但这似乎并没有涉及到的外部IP。同样,一旦设置了负载均衡器,服务的 status.loadBalancer.ingress.ip 字段就会设置为其外部 IP 地址,但这似乎不是一个可配置的设置。
作为替代方案,我尝试在 Google Compute Engine 控制台中手动创建转发规则,将来自静态 IP 地址的流量定向到 Kubernetes 设置的目标池,但是当我尝试连接时,连接被拒绝。
有什么方法可以做我想做的事 - 在选定的静态 IP 地址上在 Google Kubernetes 引擎上公开 Kubernetes …
docker google-compute-engine kubernetes google-cloud-platform google-kubernetes-engine
gcloud
在 GCE 之外以非交互方式使用命令行与服务帐户的最简单方法是什么?最好不要用凭证文件乱扔文件系统,这就是这样gcloud auth activate-service-account --key-file=...
做的。
有许多使用gcloud
服务帐户的用例。例如,在服务器上,我想GOOGLE_APPLICATION_CREDENTIALS
在运行我的应用程序之前测试是否正确设置并具有所需的权限。或者,我想运行一些设置脚本或 cron 脚本来执行一些gcloud
命令行检查。
Google Cloud 库(例如python、java)自动使用环境变量GOOGLE_APPLICATION_CREDENTIALS
向 Google Cloud 进行身份验证。但不幸的是,这个命令行似乎对gcloud
. gcloud
在保持文件系统完好无损的同时使用干净的方法是什么?
$ GOOGLE_APPLICATION_CREDENTIALS=/etc/my-service-account-4b4b6e63aaed.json gcloud alpha pubsub topics publish testtopic hello
ERROR: (gcloud.alpha.pubsub.topics.publish) You do not currently have an active account selected.
Please run:
$ gcloud auth login
to obtain new credentials, or if you have already logged in with a
different account:
$ gcloud config set account …
Run Code Online (Sandbox Code Playgroud)