首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >GKE中的VPC本地集群无法在GKE 1.14中通信

GKE中的VPC本地集群无法在GKE 1.14中通信
EN

Stack Overflow用户
提问于 2020-06-10 11:44:24
回答 1查看 1K关注 0票数 1

我在K8s 1.14.10上创建了两个独立的GKE集群。

在GKE集群升级到1.14.6之后,VPN无法访问内部网络

我跟踪了这个文件和IP伪装代理文档。我尝试过使用客户端pod和服务器pod来交换消息来测试这个问题。我使用内部节点IP发送消息,并创建了一个ClusterIP来公开吊舱。

我允许防火墙规则中的每个实例请求入口和出口,即0.0.0.0/0图片:这是我创建的集群的描述。 IP伪装代理的配置映射与文档中相同。我可以从吊舱内平另一个节点,但是curl请求说连接被拒绝,tcpdump没有显示任何数据。

问题:在GKE1.14中,我需要从集群A到集群B之间进行通信,并将其设置为true。我要么被拒绝连接,要么i/o超时。我尝试使用内部和外部节点IP,以及使用负载平衡器。

EN

回答 1

Stack Overflow用户

发布于 2020-06-26 13:43:04

您已经提供了相当一般的信息,如果没有详细信息,我就无法提供具体的场景答案。这可能与您如何创建集群或其他防火墙设置有关。因此,我将提供使用防火墙和masquerade创建和配置2集群的正确步骤。也许你会发现你错过了哪一步或者配置错了。

集群配置(节点、荚、svc)位于答案的底部。

1.创建VPC和2个集群

在文档中,大约有两个不同的项目,但您可以在一个项目中完成。在GKE文档中可以找到VPC创建和2个集群的好例子。创建VPC机箱2团簇.在集群Tier1中,您可以现在就启用NetworkPolicy,而不是稍后启用它。在此之后,您需要创建防火墙规则。还需要将ICMP协议添加到防火墙规则中。

此时,您应该能够在来自2个集群的节点之间切换。

有关其他防火墙规则(允许在荚、svc等之间进行连接),请检查这个医生

2.启用 IP伪装代理

如docs中所述,要运行IPMasquerade

ip-masq-agent DaemonSet自动作为GKE集群中带有--nomasq所有保留范围参数的外接程序安装,如果以下一个或多个参数是正确的:群集具有网络策略。

Pod的CIDR范围不在10.0.0.0/8之内。

这意味着tier-2-cluster已经在kube-system命名空间中有了ip-masq-agent (因为The Pod's CIDR range is not within 10.0.0.0/8.)。如果您在创建NetworkPolicy期间启用了tier-1-cluster,也应该已经安装了它。如果没有,则需要使用命令启用它:

$ gcloud container clusters update tier-1-cluster --update-addons=NetworkPolicy=ENABLED --zone=us-central1-a

要验证是否一切正常,您必须检查是否创建了Daemonset ip-masq-agent荚。(每个荚为节点)。

代码语言:javascript
复制
$ kubectl get ds ip-masq-agent -n kube-system
NAME            DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                                 AGE
ip-masq-agent   3         3         3       3            3           beta.kubernetes.io/masq-agent-ds-ready=true   168m

如果要对任何节点进行SSH,您将能够看到默认的iptables条目。

代码语言:javascript
复制
$ sudo iptables -t nat -L IP-MASQ
Chain IP-MASQ (1 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             169.254.0.0/16       /* ip-masq: local traffic is not subject to MASQUERADE */
RETURN     all  --  anywhere             10.0.0.0/8           /* ip-masq: RFC 1918 reserved range is not subject to MASQUERADE */
RETURN     all  --  anywhere             172.16.0.0/12        /* ip-masq: RFC 1918 reserved range is not subject to MASQUERADE */
RETURN     all  --  anywhere             192.168.0.0/16       /* ip-masq: RFC 1918 reserved range is not subject to MASQUERADE */
RETURN     all  --  anywhere             240.0.0.0/4          /* ip-masq: RFC 5735 reserved range is not subject to MASQUERADE */
RETURN     all  --  anywhere             192.0.2.0/24         /* ip-masq: RFC 5737 reserved range is not subject to MASQUERADE */
RETURN     all  --  anywhere             198.51.100.0/24      /* ip-masq: RFC 5737 reserved range is not subject to MASQUERADE */
RETURN     all  --  anywhere             203.0.113.0/24       /* ip-masq: RFC 5737 reserved range is not subject to MASQUERADE */
RETURN     all  --  anywhere             100.64.0.0/10        /* ip-masq: RFC 6598 reserved range is not subject to MASQUERADE */
RETURN     all  --  anywhere             198.18.0.0/15        /* ip-masq: RFC 6815 reserved range is not subject to MASQUERADE */
RETURN     all  --  anywhere             192.0.0.0/24         /* ip-masq: RFC 6890 reserved range is not subject to MASQUERADE */
RETURN     all  --  anywhere             192.88.99.0/24       /* ip-masq: RFC 7526 reserved range is not subject to MASQUERADE */
MASQUERADE  all  --  anywhere             anywhere             /* ip-masq: outbound traffic is subject to MASQUERADE (must be last in chain) */

3.部署测试应用程序

我使用了来自GKE博士的Hello应用程序,并部署在这两个集群上。此外,我还部署了ubuntu映像进行测试。

4.为IPMasquerade应用适当的配置--这个配置需要在source集群上。

简而言之,如果目的地CIDR在nonMasqueradeCIDRs:中,它将显示它的内部IP,否则它将显示NodeIP作为源。

config保存到以下文本:

代码语言:javascript
复制
nonMasqueradeCIDRs:
  - 10.0.0.0/8
resyncInterval: 2s
masqLinkLocal: true

创建IPMasquarade ConfigMap

代码语言:javascript
复制
$ kubectl create configmap ip-masq-agent --from-file config --namespace kube-system

它将覆盖iptables配置。

代码语言:javascript
复制
$ sudo iptables -t nat -L IP-MASQ
Chain IP-MASQ (2 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             10.0.0.0/8           /* ip-masq-agent: local traffic is not subject to MASQUERADE */
MASQUERADE  all  --  anywhere             anywhere             /* ip-masq-agent: outbound traffic is subject to MASQUERADE (must be last in chain) */

5.测试:

IP被伪装为时的

从SSH到Node形成Tier2集群并运行:

代码语言:javascript
复制
sudo toolbox bash
apt-get update
apt install -y tcpdump

现在,您应该使用下面的命令来收听。端口32502是来自Tier 2集群的NodePort服务

代码语言:javascript
复制
tcpdump -i eth0 -nn -s0 -v port 32502

在集群Tier1中,您需要输入ubuntu和curl NodeIP:NodePort

代码语言:javascript
复制
$ kubectl exec -ti ubuntu -- bin/bash 

您需要安装curl apt-get install curl

curl NodeIP:NodePort (节点正在监听,NodePort来自集群第2层的服务)。

CLI:

代码语言:javascript
复制
root@ubuntu:/# curl 172.16.4.3:32502
Hello, world!
Version: 2.0.0
Hostname: hello-world-deployment-7f67f479f5-h4wdm

在Node上,您可以看到条目如下:

代码语言:javascript
复制
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
12:53:30.321641 IP (tos 0x0, ttl 63, id 25373, offset 0, flags [DF], proto TCP (6), length 60)
    10.0.4.4.56018 > 172.16.4.3.32502: Flags [S], cksum 0x8648 (correct), seq 3001889856

10.0.4.4是Ubuntu所在的NodeIP

IP未伪装为时的

从群集第1层删除ConfigMap

代码语言:javascript
复制
$ kubectl delete cm ip-masq-agent -n kube-system

将文件config CIDR更改为172.16.4.0/22,即Tier 2节点池并重新应用CM

代码语言:javascript
复制
$ kubectl create configmap ip-masq-agent --from-file config --namespace kube-system

从第1层到任何节点的SSH,以检查是否更改了iptables rules

代码语言:javascript
复制
sudo iptables -t nat -L IP-MASQ
Chain IP-MASQ (2 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             172.16.4.0/22        /* ip-masq-agent: local traffic is not subject to MASQUERADE */
MASQUERADE  all  --  anywhere             anywhere             /* ip-masq-agent: outbound traffic is subject to MASQUERADE (must be last in chain) */

现在,为了测试,我再次使用Ubuntu和卷曲相同的ip像以前。

代码语言:javascript
复制
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
13:16:50.316234 IP (tos 0x0, ttl 63, id 53160, offset 0, flags [DF], proto TCP (6), length 60)
    10.4.2.8.57876 > 172.16.4.3.32502

10.4.2.8是Ubuntu的内部IP。

测试的配置:

TIER1

代码语言:javascript
复制
NAME                                          READY   STATUS    RESTARTS   AGE   IP         NODE                                            NOMINATED NODE   READINESS GATES
pod/hello-world-deployment-7f67f479f5-b2qqz   1/1     Running   0          15m   10.4.1.8   gke-tier-1-cluster-default-pool-e006097b-5tnj   <none>           <none>
pod/hello-world-deployment-7f67f479f5-shqrt   1/1     Running   0          15m   10.4.2.5   gke-tier-1-cluster-default-pool-e006097b-lfvh   <none>           <none>
pod/hello-world-deployment-7f67f479f5-x7jvr   1/1     Running   0          15m   10.4.0.8   gke-tier-1-cluster-default-pool-e006097b-1wbf   <none>           <none>
ubuntu                                    1/1     Running   0          91s   10.4.2.8   gke-tier-1-cluster-default-pool-e006097b-lfvh   <none>           <none>

NAME                  TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)           AGE    SELECTOR
service/hello-world   NodePort    10.0.36.46   <none>        60000:31694/TCP   14m    department=world,greeting=hello
service/kubernetes    ClusterIP   10.0.32.1    <none>        443/TCP           115m   <none>

NAME                                                 STATUS   ROLES    AGE    VERSION           INTERNAL-IP   EXTERNAL-IP     OS-IMAGE                             KERNEL-VERSION   CONTAINER-RUNTIME
node/gke-tier-1-cluster-default-pool-e006097b-1wbf   Ready    <none>   115m   v1.14.10-gke.36   10.0.4.2      35.184.38.21    Container-Optimized OS from Google   4.14.138+        docker://18.9.7
node/gke-tier-1-cluster-default-pool-e006097b-5tnj   Ready    <none>   115m   v1.14.10-gke.36   10.0.4.3      35.184.207.20   Container-Optimized OS from Google   4.14.138+        docker://18.9.7
node/gke-tier-1-cluster-default-pool-e006097b-lfvh   Ready    <none>   115m   v1.14.10-gke.36   10.0.4.4      35.226.105.31   Container-Optimized OS from Google   4.14.138+        docker://18.9.7<none>   100m   v1.14.10-gke.36   10.0.4.4      35.226.105.31   Container-Optimized OS from Google   4.14.138+        docker://18.9.7

TIER2

代码语言:javascript
复制
$ kubectl get pods,svc,nodes -o wide
NAME                                          READY   STATUS    RESTARTS   AGE   IP           NODE                                            NOMINATED NODE   READINESS GATES
pod/hello-world-deployment-7f67f479f5-92zvk   1/1     Running   0          12m   172.20.1.5   gke-tier-2-cluster-default-pool-57b1cc66-xqt5   <none>           <none>
pod/hello-world-deployment-7f67f479f5-h4wdm   1/1     Running   0          12m   172.20.1.6   gke-tier-2-cluster-default-pool-57b1cc66-xqt5   <none>           <none>
pod/hello-world-deployment-7f67f479f5-m85jn   1/1     Running   0          12m   172.20.1.7   gke-tier-2-cluster-default-pool-57b1cc66-xqt5   <none>           <none>

NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)           AGE    SELECTOR
service/hello-world   NodePort    172.16.24.206   <none>        60000:32502/TCP   12m    department=world,greeting=hello
service/kubernetes    ClusterIP   172.16.16.1     <none>        443/TCP           113m   <none>

NAME                                                 STATUS   ROLES    AGE    VERSION           INTERNAL-IP   EXTERNAL-IP      OS-IMAGE                             KERNEL-VERSION   CONTAINER-RUNTIME
node/gke-tier-2-cluster-default-pool-57b1cc66-84ng   Ready    <none>   112m   v1.14.10-gke.36   172.16.4.2    35.184.118.151   Container-Optimized OS from Google   4.14.138+        docker://18.9.7

node/gke-tier-2-cluster-default-pool-57b1cc66-mlmn   Ready    <none>   112m   v1.14.10-gke.36   172.16.4.3    35.238.231.160   Container-Optimized OS from Google   4.14.138+        docker://18.9.7

node/gke-tier-2-cluster-default-pool-57b1cc66-xqt5   Ready    <none>   112m   v1.14.10-gke.36   172.16.4.4    35.202.94.194    Container-Optimized OS from Google   4.14.138+        docker://18.9.7
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62302767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档