我试图限制我的 openvpn 以允许访问内部基础设施并仅通过“开发”命名空间来限制它,所以我从拒绝所有出口流量的简单策略开始,并且看不到任何影响或来自集群的任何反馈,我已经阅读了所有官方和非官方文档并且没有找到解决方案,这是我的政策:
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: policy-openvpn
namespace: default
spec:
podSelector:
matchLabels:
app: openvpn
policyTypes:
- Egress
egress: []
Run Code Online (Sandbox Code Playgroud)
我已经用kubectl apply -f policy.yaml命令应用了上面的网络策略,但我没有看到这个策略的任何影响,我仍然能够从我的 openvpn pod 连接到任何东西,如何调试它并查看我的策略有什么问题?
这对我来说似乎是一个黑匣子,只能做尝试错误的方法,这似乎不是它应该如何工作的。
如何验证它是否找到了 pod 并将策略应用于它们?
我正在使用 GKE 提供的最新 kubernetes 集群
我注意到我没有在谷歌云设置中检查“使用网络策略”,在我检查我的 vpn 刚刚停止工作后,但我不知道如何检查它,或者为什么 vpn 只允许我连接并阻止所有网络请求,很奇怪,有没有办法调试是而不是随机改变东西?
kubernetes google-kubernetes-engine kubernetes-networkpolicy gke-networking
我有一个 GKE 集群,它使用 Nginx Ingress Controller 作为其入口引擎。目前,当我设置 Nginx Ingress Controller 时,我定义了一项服务kind: LoadBalancer并将其指向先前在 GCP 上保留的外部静态 IP。问题是它只绑定到区域静态 IP 地址(如果我没记错的话,是 L4 负载均衡器)。我想要一个全局负载均衡器。
我知道我可以通过使用 GKE 入口控制器而不是 Nginx 入口控制器来实现这一点。但我仍然想使用 Nginx Ingress,因为它具有强大的注释功能,例如根据条件重写标头等;GKE Ingress 注释不可用的内容。
最后,有没有办法将全局负载均衡器与 nginx 入口控制器结合起来,或者将全局负载均衡器放在 Nginx 创建的 L4 负载均衡器前面?
我们需要有全局负载均衡器才能受到 Cloud Armor 的保护。
nginx google-kubernetes-engine nginx-ingress google-cloud-armor gke-networking
我有一个同时包含 Http 和 Https 的 GKE 入口。我想将流量从端口 80 重定向到端口 443。我发现了这个:https: //github.com/kubernetes/ingress-gce/issues/1075 ,它让这个: https: //cloud.google.com/kubernetes -engine/docs/how-to/ingress-features#https_redirect。
建议的解决方案添加了一个带有 RedirectToHttps 标志的 FrontendConfig,该标志使用了一些 LoadBalancer 功能。然而,当我尝试添加 FrontendEndConfig 时,出现以下错误:
error: unable to recognize "ssl.yaml": no matches for kind "FrontendConfig" in version "networking.gke.io/v1beta1"
Run Code Online (Sandbox Code Playgroud)
我还尝试过“networking.gke.io/v1”和“v1beta2”。我的区域中可用的最新 GKE 版本是 1.17.13-gke.2001。我最近启动了集群,所以虽然我不知道如何检查 GKE 版本,但我认为它正在最新版本上运行。
有人知道为什么我的 kubectl 不识别这种类型吗?
入口 yaml:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: basic-ingress
annotations:
FrontendConfig: my-frontend-config
kubernetes.io/ingress.global-static-ip-name: 'web-static-ip'
networking.gke.io/managed-certificates: mycertificate
# kubernetes.io/ingress.allow-http: "false"
spec:
rules:
- http:
paths:
- path: /*
backend:
serviceName: frontend
servicePort: 80
- path: …Run Code Online (Sandbox Code Playgroud) GCP网络标签可以应用于虚拟机(也可能应用于 GKE 节点池)。然后防火墙规则可以针对这些资源。它们只有名称,没有值。
另一方面,标签更像标签,因为它们具有键名称和值。例如[环境=生产]
官方文档描述了标签和标签之间的区别。
标签提供了一种根据资源是否具有特定标签有条件地允许或拒绝策略的方法。您可以使用标签和有条件执行策略来跨资源层次结构进行细粒度控制
但没有具体提及防火墙规则。
如果我将标签应用于资源,我可以编写防火墙规则来定位这些资源(假设它们是可定位的网络目标)
使用版本 1.23.5-gke.150 的 GKE,集群可以应用标签。这些可以用作网络标签吗?
我正在尝试在GKE上配置https负载均衡器。我正在追踪:https : //cloud.google.com/load-balancing/docs/ssl-certificates和https://cloud.google.com/kubernetes-engine/docs/concepts/ingress
我的配置已经使用Let's Encrypt的证书工作了一段时间。但是,每次都需要续订证书太麻烦了,所以我想测试Google的托管服务。
到目前为止,这就是我设置的方式,但是仍然存在FAILED_NOT_VISIBLE。关于如何进一步修复或调试的任何想法?
k8s / staging / staging-ssl.yml
7 apiVersion: extensions/v1beta1
8 kind: Ingress
9 metadata:
10 name: my-staging-lb-ingress
11 annotations:
12 kubernetes.io/ingress.global-static-ip-name: "my-staging-global"
13 ingress.gcp.kubernetes.io/pre-shared-cert: "staging-google-managed-ssl"
14 kubernetes.io/ingress.allow-http: "false"
15 spec:
16 rules:
17 - host: staging.my-app.no
18 http:
19 paths:
20 - path: /*
21 backend:
22 serviceName: my-svc
23 servicePort: 3001
Run Code Online (Sandbox Code Playgroud)
预留IP
$ gcloud compute addresses list
NAME REGION ADDRESS STATUS
my-staging-global 35.244.160.NNN RESERVED
$ host staging.my-app.no
35.244.160.NNN
Run Code Online (Sandbox Code Playgroud)
$ …
ssl google-cloud-platform google-kubernetes-engine gke-networking
是否可以使用公共证书直接在 L4 负载均衡器后面公开服务器?
该服务器位于 Kubernetes pod 内。它前面有一个 TCP 负载均衡器服务,用于创建外部 L4 LB。
我的问题是 TLS 流量无法到达 pod 内的容器。因此,如果您使用类似的配置成功,我将有兴趣了解。
我没有提到流量是GRPC。
这是我所做的:我有一个域和一个相应的官方证书。我想保护 grpc 连接。
我尝试了两种方法:
在这种情况下,我在客户端收到这样的消息:
D0610 14:38:46.246248584 32401 security_handshaker.cc:176] 安全握手失败:{"created":"@1591792726.246234613","description":"握手失败","file"/:"。 core/lib/security/transport/security_handshaker.cc","file_line":291,"tsi_code":10,"tsi_error":"TSI_PROTOCOL_FAILURE"}
我看到一些与wireshark的TLS交换,但没有登录esp。
错误:1408F10B:SSL 例程:ssl3_get_record:版本号错误
在google ESP 文档中,我看到我必须证明域属于我并上传证书(但在哪里)?
截至今天,我没有看到任何证据表明这是可行的。
IMO,主要问题是L4有对应证书域名的IP。因此,pod 没有正确的 IP 来证明他们可以使用证书,因此他们对根的请求被拒绝(我没有证据,因为我无法从 ESP 中的 nginx 获取调试信息。我看到了一个使用纯 GRPC 服务器解决方案请求)。
ssl load-balancing google-cloud-platform google-kubernetes-engine gke-networking
我希望我的持久卷驻留在特定区域,例如 us-central1-a,但我想通过 PVC 来部署它,而不是直接创建 PV 对象。这在 GKE 中可能吗?
我在运行最新版本 Kubernetes ( ) 的 GKE Autopilot 集群上使用 GKE 设置了一个(非常)简单的部署1.18.15-gke.1501,并附加了一个链接到简单ClusterIP服务的入口(外部 HTTP(s) 负载均衡器)。
每当我使用新映像更新部署时,我都会遇到大约 5-15 分钟的停机时间,其中负载均衡器返回 502 错误。看起来控制平面创建了新的、更新的 Pod,允许进行服务级别运行状况检查(不是负载均衡器的健康检查,它还没有创建 NEG),然后同时杀死旧的 Pod是时候设置新的 NEG 了。然后,直到一段可变的时间后,它才会删除旧的 NEG。
Pod 上的日志显示运行状况检查正在进行,但 GKE 仪表板显示 Ingress 状态的结果不一致。入口将显示正常,但服务将显示 502。
maxSurge为 1 和maxUnavailable0。这根本没有改善停机时间。lifecycle.preStop.exec.command: ["sleep", "60"]到部署上的容器。这是 GKE 文档中建议的。BackendConfig在服务中添加一个会增加其消耗速度。上述任何一项都没有帮助或对事情的持续时间产生任何明显的影响。
我真的非常困惑为什么这不起作用。感觉就像我错过了一些非常明显的东西,但这也是一个如此简单的配置,你会认为它......只是工作?有人知道发生了什么事吗?
部署配置:
apiVersion: apps/v1
kind: Deployment
metadata:
name: foundation-deployment
spec:
replicas: 3
strategy: …Run Code Online (Sandbox Code Playgroud) docker google-cloud-platform kubernetes google-kubernetes-engine gke-networking
我按照本指南设置了nginx入口控制器.
入口运行良好,我也可以访问defaultbackend服务和我自己的服务.
但是,在查看在Google Cloud Console中创建的对象时,特别是自动创建的负载均衡器对象时,我注意到其他节点的运行状况检查失败:

这是因为入口控制器进程只在一个节点上运行,所以它是唯一通过运行状况检查的进程吗?如何让其他节点通过?
nginx kubernetes google-kubernetes-engine kubernetes-health-check gke-networking
我们将现有的开发集群从 1.13.6-gke.13 升级到 1.14.6-gke.13,我们的 pod 无法再通过 Google Cloud VPN 访问我们的内部网络。我们的生产集群(仍在 1.13 上)共享相同的 VPC 网络和 VPN 隧道,并且仍然运行良好。唯一改变的是管理节点和节点池在开发集群上升级到 1.14。
我在开发集群上的一个 pod 中打开了一个 shell,并尝试 ping 一个我们需要访问的内部服务器的 IP 地址。没有收到回复。在我们的生产集群中的 pod 上做同样的事情会按预期工作。
我通过 ssh 连接到集群中的一个节点,并且能够 ping 内部网络。所以它只是有网络问题的豆荚。
对集群中公开暴露的服务的访问仍按预期工作。健康检查没问题。
更新:
我使用最新的 1.13 版本创建了一个新的节点池,从 1.14 池中排空了 pod,所有 pod 再次在 1.13 池上运行。1.14 肯定有问题。这是由某些新配置选项引起的问题还是只是一个错误,还有待观察。
解析度:
IP 伪装在这里讨论https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent。我的解决方案是将我的每个集群的 pod 子网添加到 GCP 上我的 VPN 云路由器中的广告网络列表中。所以现在 pod 网络可以穿越 VPN。