公共子网上的AWS EKS CoreDNS问题

时间:2019-01-31 18:38:00

标签: amazon-eks

我使用其设置步骤完成了AWS EKS。

AWS EKS版本1.11,coredns

使用的VPC我根据这里其文档创建两个公共专用子网:https://docs.aws.amazon.com/eks/latest/userguide/create-public-private-vpc.html

部署到私有子网的节点标记为“私有”,部署到公共子网的节点标记为“公共”。

当我在每个nodeSelector(公共/私有)上部署一个忙碌盒Pod时,公共容器将无法解析dns,而私有容器则可以。

const width = 200; const height = 200; const canvas = document.getElementsByTagName('canvas')[0]; const context = canvas.getContext('2d'); canvas.width = width; canvas.height = height; const destData = new ImageData(width, height); const dData = destData.data; for (let y = 0; y < height; y++) { for (let x = 0; x < width; x++) { const o = 4 * (y * width + x); dData[o] = 255; // R dData[o + 1] = 0; // G dData[o + 2] = 0; // B dData[o + 3] = 255; // A } } context.putImageData(destData, 0, 0);

如果我ssh到成功的公共子网节点本身我能够平主机名(即google.com)。

有什么想法吗?

nslookup: can't resolve 'kubernetes.default'
# kubectl exec -it busybox-private -- nslookup kubernetes.default

Server:    172.20.0.10
Address 1: 172.20.0.10 ip-172-20-0-10.ec2.internal

Name:      kubernetes.default
Address 1: 172.20.0.1 ip-172-20-0-1.ec2.internal
# kubectl exec -it busybox-public -- nslookup kubernetes.default
Server:    172.20.0.10
Address 1: 172.20.0.10

nslookup: can't resolve 'kubernetes.default'
command terminated with exit code 1

经历“调试DNS解析” https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/

奇怪的是,AWS的coredns pod仍然标记为kube-dns

# kubectl -n=kube-system get all
NAME                           READY     STATUS    RESTARTS   AGE
pod/aws-node-46626             1/1       Running   0          3h
pod/aws-node-52rqw             1/1       Running   1          3h
pod/aws-node-j7n8l             1/1       Running   0          3h
pod/aws-node-k7kbr             1/1       Running   0          3h
pod/aws-node-tr8x7             1/1       Running   0          3h
pod/coredns-7bcbfc4774-5ssnx   1/1       Running   0          20h
pod/coredns-7bcbfc4774-vxrgs   1/1       Running   0          20h
pod/kube-proxy-2c7gj           1/1       Running   0          3h
pod/kube-proxy-5qr9h           1/1       Running   0          3h
pod/kube-proxy-6r96f           1/1       Running   0          3h
pod/kube-proxy-9tqxt           1/1       Running   0          3h
pod/kube-proxy-bhkzx           1/1       Running   0          3h

NAME               TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)         AGE
service/kube-dns   ClusterIP   172.20.0.10   <none>        53/UDP,53/TCP   20h

NAME                        DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/aws-node     5         5         5         5            5           <none>          20h
daemonset.apps/kube-proxy   5         5         5         5            5           <none>          20h

NAME                      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/coredns   2         2         2            2           20h

NAME                                 DESIRED   CURRENT   READY     AGE
replicaset.apps/coredns-7bcbfc4774   2         2         2         20h

1 个答案:

答案 0 :(得分:0)

我认为我发现问题所在是查看工作节点安全组。

AWS EKS kube-dns终端节点和Pod位于私有子网中。

我有两个CloudFormation堆栈。...一个用于在私有子网中自动缩放节点,一个用于在公共子网中自动缩放节点。

他们没有公共安全组,因此在公共节点上运行的Pod无法访问在私有节点上运行的kube-dns Pod。

一旦我更新了工作节点安全组以允许dns开始工作时进行交叉通信。

请张贴任何人看到任何意想不到的后果。谢谢!