我使用 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时休息,他们并没有解决我的问题,因为豆荚应该是外部连接。
我正在尝试将 docker 映像推送到 Google 的容器注册表,但不断收到有关 Docker 登录失败的错误消息。我跑
gcloud docker -- push gcr.io/<my-project-id>/test-image
Run Code Online (Sandbox Code Playgroud)
我回来了
ERROR: Docker CLI operation failed:
Error response from daemon: login attempt to
https://appengine.gcr.io/v2/ failed with status: 404 Not Found
ERROR: (gcloud.docker) Docker login failed.
Run Code Online (Sandbox Code Playgroud)
其他不通过 docker 工作的 gcloud 操作。例如,我可以通过gcloud container clusters create my-cluster
.
我今天确实在玩本地注册表,不确定这是否会破坏事情。
谢谢!
我目前使用 Kubernetes 规范Deployment.yaml
来部署服务。该规范包括对特定 IP 地址的逐字引用(标记<static-ip-address>
如下):
spec:
type: LoadBalancer
loadBalancerIP: <static-ip-address>
Run Code Online (Sandbox Code Playgroud)
我担心将密码或 IP 地址等信息推送到远程 Git 存储库中。我可以通过使用环境变量来避免这种情况,例如使用部署规范和实际部署大致如下:
spec:
type: LoadBalancer
loadBalancerIP: ${SERVICE_ADDRESS}
Run Code Online (Sandbox Code Playgroud)
和
export SERVICE_ADDRESS=<static-ip-address>
kubectl create -f Deployment.yaml
Run Code Online (Sandbox Code Playgroud)
显然,这种特定的语法还不起作用。但是这样的事情可能吗,如果有的话怎么办?
我宁愿不依赖单独的配置工具。Secret s 和ConfigMap
s 看起来很有希望,但显然不能以适合此目的的方式使用它们。如果我可以直接引用用它定义的静态 IP 地址gcloud compute addresses create service-address
,那就最好了。
我正在使用 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
我在本地开发docker-compose
,并且有一个 nginx 容器做一个简单的proxy_pass
像这样:
location /app/ {
proxy_pass http://webapp:3000/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
resolver 127.0.0.11;
}
Run Code Online (Sandbox Code Playgroud)
我现在想转移到 kubernetes
GKE 中,最后一行给我带来了麻烦。
我试图将解析器切换到:
resolver kube-dns;
Run Code Online (Sandbox Code Playgroud)
我还尝试了各种其他 IP 和名称,但我不断收到以下错误:
nginx: [emerg] host not found in resolver "kube-dns"
Run Code Online (Sandbox Code Playgroud)
我的 kubernetes 设置是我有一个 pod,有 2 个容器:“webapp”和“nginx”。我只想有一个service
指向 nginx的外部可以proxy_pass
指向 webapp 的。
有任何想法吗?
我正在使用 Gitlab-CI 在 GCE 上部署 Kubernetes 集群。我想将成本保持在最低水平 - 这是我目前的设置:
f1-micro
实例上运行Traefik
使用 ServiceType 配置运行的系统 podLoadBalancer
postgres
吊舱ingress
为 Traefik 配置的Web 服务器 pod我想降低部署成本。大部分成本由 GCE 负载均衡器承担。有没有办法在 GCE 上使用公共 IP 地址而不是负载均衡器?如果是这样,我是否可以使用分配给集群的 IP 地址(而不是保留静态 IP)?
换句话说,有没有办法在没有负载均衡器的情况下使用 GCE 将临时 IP 绑定到 Kubernetes 服务?
是否有任何其他配置我可以做不同的事情来降低 GCE 的总体成本?
load-balancing google-compute-engine kubernetes google-kubernetes-engine
有没有办法Alias IP
在现有的 GKE 集群上启用(禁用Alias IP
)?
(除了使用https://github.com/bowei/k8s-custom-iptables在每个节点上创建 NAT)
我有一个 GCE http(s) 负载均衡器配置为将流量定向到 2 个后端: - 默认后端 - 带有单独主机/路径规则的第二个后端 ( <host>:/*
)
两个后端都存在于同一个实例组中——一个容器集群,运行两个暴露不同 NodePort 的 kubernetes 服务。
实例组有两个命名端口,每个暴露的 NodePort 一个。
尽管两个后端都报告健康,但对第二个后端的所有请求都返回 502。
服务本身不是问题 - 如果我将第二个后端后面的服务切换为默认服务,它可以正常工作。
注意:自从它第一次发布以来,我已经大大更新/简化了这个描述,因为我能够用更简单的配置重现这个问题。
load-balancing google-compute-engine google-cloud-platform google-kubernetes-engine
我有一种情况,Kubernetes 显然无法再为kubectl create -f Deployment.yaml
. kubectl describe service <my-service>
报告以下错误:
CreatingLoadBalancerFailed
Error creating load balancer (will retry): Failed to create load balancer
for service default/<my-service>: requested ip <my-address> is
neither static nor assigned to LB <id>(default/<my-service>): <nil>
Run Code Online (Sandbox Code Playgroud)
但gcloud compute addresses list
表示my-address
是静态IP地址:
NAME REGION ADDRESS STATUS
<my-address> europe-west1 <ip-address> RESERVED
Run Code Online (Sandbox Code Playgroud)
并Deployment.yaml
包含<my-service>
分配<my-address>
给负载均衡器的规范:
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: UDP
port: …
Run Code Online (Sandbox Code Playgroud) 我想为 OOMKilled 事件设置检测,在检查 pod 时看起来像这样:
Name: pnovotnak-manhole-123456789-82l2h
Namespace: test
Node: test-cluster-cja8smaK-oQSR/10.x.x.x
Start Time: Fri, 03 Feb 2017 14:34:57 -0800
Labels: pod-template-hash=123456789
run=pnovotnak-manhole
Status: Running
IP: 10.x.x.x
Controllers: ReplicaSet/pnovotnak-manhole-123456789
Containers:
pnovotnak-manhole:
Container ID: docker://...
Image: pnovotnak/it
Image ID: docker://sha256:...
Port:
Limits:
cpu: 2
memory: 3Gi
Requests:
cpu: 200m
memory: 256Mi
State: Running
Started: Fri, 03 Feb 2017 14:41:12 -0800
Last State: Terminated
Reason: OOMKilled
Exit Code: 137
Started: Fri, 03 Feb 2017 14:35:08 -0800
Finished: Fri, 03 Feb 2017 14:41:11 -0800 …
Run Code Online (Sandbox Code Playgroud)