Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 为什么不是';Kubernetes服务DNS工作正常吗?_Amazon Web Services_Dns_Kubernetes_Coreos - Fatal编程技术网

Amazon web services 为什么不是';Kubernetes服务DNS工作正常吗?

Amazon web services 为什么不是';Kubernetes服务DNS工作正常吗?,amazon-web-services,dns,kubernetes,coreos,Amazon Web Services,Dns,Kubernetes,Coreos,我已经在CoreOS/AWS上的Kubernetes(v1.1.2+1abf20d)系统中设置了DNS,但我无法通过DNS查找服务。我试过调试,但我一辈子都找不到原因。这就是我尝试查找kubernetes服务时发生的情况,该服务应始终可用: $ ~/.local/bin/kubectl --kubeconfig=/etc/kubernetes/kube.conf exec busybox-sleep -- nslookup kubernetes.default Server: 10.3.0

我已经在CoreOS/AWS上的Kubernetes(v1.1.2+1abf20d)系统中设置了DNS,但我无法通过DNS查找服务。我试过调试,但我一辈子都找不到原因。这就是我尝试查找kubernetes服务时发生的情况,该服务应始终可用:

$ ~/.local/bin/kubectl --kubeconfig=/etc/kubernetes/kube.conf exec busybox-sleep -- nslookup kubernetes.default
Server:    10.3.0.10
Address 1: 10.3.0.10 ip-10-3-0-10.eu-central-1.compute.internal

nslookup: can't resolve 'kubernetes.default'
error: error executing remote command: Error executing command in container: Error executing in Docker Container: 1
我已根据此规范安装DNS插件:

apiVersion: v1
kind: ReplicationController
metadata:
  name: kube-dns-v10
  namespace: kube-system
  labels:
    k8s-app: kube-dns
    version: v10
    kubernetes.io/cluster-service: "true"
spec:
  replicas: 1
  selector:
    k8s-app: kube-dns
    version: v10
  template:
    metadata:
      labels:
        k8s-app: kube-dns
        version: v10
        kubernetes.io/cluster-service: "true"
    spec:
      containers:
      - name: etcd
        image: gcr.io/google_containers/etcd-amd64:2.2.1
        resources:
          # keep request = limit to keep this container in guaranteed class
          limits:
            cpu: 100m
            memory: 50Mi
          requests:
            cpu: 100m
            memory: 50Mi
        command:
        - /usr/local/bin/etcd
        - -data-dir
        - /var/etcd/data
        - -listen-client-urls
        - http://127.0.0.1:2379,http://127.0.0.1:4001
        - -advertise-client-urls
        - http://127.0.0.1:2379,http://127.0.0.1:4001
        - -initial-cluster-token
        - skydns-etcd
        volumeMounts:
        - name: etcd-storage
          mountPath: /var/etcd/data
      - name: kube2sky
        image: gcr.io/google_containers/kube2sky:1.12
        resources:
          # keep request = limit to keep this container in guaranteed class
          limits:
            cpu: 100m
            memory: 50Mi
          requests:
            cpu: 100m
            memory: 50Mi
        args:
        # command = "/kube2sky"
        - --domain=cluster.local
      - name: skydns
        image: gcr.io/google_containers/skydns:2015-10-13-8c72f8c
        resources:
          # keep request = limit to keep this container in guaranteed class
          limits:
            cpu: 100m
            memory: 50Mi
          requests:
            cpu: 100m
            memory: 50Mi
        args:
        # command = "/skydns"
        - -machines=http://127.0.0.1:4001
        - -addr=0.0.0.0:53
        - -ns-rotate=false
        - -domain=cluster.local.
        ports:
        - containerPort: 53
          name: dns
          protocol: UDP
        - containerPort: 53
          name: dns-tcp
          protocol: TCP
        livenessProbe:
          httpGet:
            path: /healthz
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 30
          timeoutSeconds: 5
        readinessProbe:
          httpGet:
            path: /healthz
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 1
          timeoutSeconds: 5
      - name: healthz
        image: gcr.io/google_containers/exechealthz:1.0
        resources:
          # keep request = limit to keep this container in guaranteed class
          limits:
            cpu: 10m
            memory: 20Mi
          requests:
            cpu: 10m
            memory: 20Mi
        args:
        - -cmd=nslookup kubernetes.default.svc.cluster.local 127.0.0.1 >/dev/null
        - -port=8080
        ports:
        - containerPort: 8080
          protocol: TCP
      volumes:
      - name: etcd-storage
        emptyDir: {}
      dnsPolicy: Default  # Don't use cluster DNS.

---

apiVersion: v1
kind: Service
metadata:
  name: kube-dns
  namespace: kube-system
  labels:
    k8s-app: kube-dns
    kubernetes.io/cluster-service: "true"
    kubernetes.io/name: "KubeDNS"
spec:
  selector:
    k8s-app: kube-dns
  clusterIP: 10.3.0.10
  ports:
  - name: dns
    port: 53
    protocol: UDP
  - name: dns-tcp
    port: 53
    protocol: TCP

为什么服务的DNS查找在我的Kubernetes设置中不起作用?请让我知道我还需要提供哪些信息。

我需要做两件事:

  • 通过kubeconfig配置kube2sky,以便为TLS正确配置
  • 通过kubeconfig配置kube代理,以便为TLS正确配置并找到主节点
  • /主节点上的etc/kubernetes/kube.conf /工作节点上的etc/kubernetes/kube.conf /主节点上的etc/kubernetes/manifests/kube-proxy.yaml /工作节点上的etc/kubernetes/manifests/kube-proxy.yaml
    你能试试这个吗。我怀疑您的dns吊舱无法联系主机,因此dns吊舱中的etcd没有dns记录。您应该能够通过创建此pod来验证与主机对话的能力:。您还可以尝试ping DNS服务的端点(从kubectl get ep--namespace=kube system)。@PrashanthB请参阅我的要点,以获取您的问题中三个调试命令的输出。@PrashanthB命令
    ~/.local/bin/kubectl--kubeconfig=/etc/kubernetes/kube.conf get ep--namespace=kube system
    显示了kube DNS,但它没有端点。您的skydns已准备就绪:false,即使一个容器未准备就绪,它也不会显示为端点。你能把你的yaml更新到最近的版本并给我kube2sky的日志吗@谢谢你。我将YAML更新为v11(根据您的链接):Logs:
    $~/.local/bin/kubectl--kubeconfig=/etc/kubernetes/kube.conf Logs kube-dns-v10-q0jtf--namespace=kube system-c kube2sky I0310 13:51:22.623140 1 kube2sky.go:436]Etcd服务器已找到:http://127.0.0.1:4001 I0310 13:51:23.626707 1 kube2sky.go:503]使用https://10.3.0.1:443 对于库伯内特斯大师I0310 13:51:23.626828 1kube2sky.go:504]使用kubernetes API
    
    apiVersion: v1
    kind: Config
    clusters:
    - name: kube
      cluster:
        server: https://127.0.0.1:443
        certificate-authority: /etc/ssl/etcd/ca.pem
    users:
    - name: kubelet
      user:
        client-certificate: /etc/ssl/etcd/master-client.pem
        client-key: /etc/ssl/etcd/master-client-key.pem
    contexts:
    - context:
      cluster: kube
      user: kubelet
    
    apiVersion: v1
    kind: Config
    clusters:
    - name: local
      cluster:
        certificate-authority: /etc/ssl/etcd/ca.pem
        server: https://<master IP>:443
    users:
    - name: kubelet
      user:
        client-certificate: /etc/ssl/etcd/worker.pem
        client-key: /etc/ssl/etcd/worker-key.pem
    contexts:
    - context:
        cluster: local
        user: kubelet
      name: kubelet-context
    current-context: kubelet-context
    
    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: kube-dns-v11
      namespace: kube-system
      labels:
        k8s-app: kube-dns
        version: v11
        kubernetes.io/cluster-service: "true"
    spec:
      replicas: 1
      selector:
        k8s-app: kube-dns
        version: v11
      template:
        metadata:
          labels:
            k8s-app: kube-dns
            version: v11
            kubernetes.io/cluster-service: "true"
        spec:
          containers:
          - name: etcd
            image: gcr.io/google_containers/etcd-amd64:2.2.1
            resources:
              # TODO: Set memory limits when we've profiled the container for large
              # clusters, then set request = limit to keep this container in
              # guaranteed class. Currently, this container falls into the
              # "burstable" category so the kubelet doesn't backoff from restarting
              # it.
              limits:
                cpu: 100m
                memory: 500Mi
              requests:
                cpu: 100m
                memory: 50Mi
            command:
            - /usr/local/bin/etcd
            - -data-dir
            - /var/etcd/data
            - -listen-client-urls
            - http://127.0.0.1:2379,http://127.0.0.1:4001
            - -advertise-client-urls
            - http://127.0.0.1:2379,http://127.0.0.1:4001
            - -initial-cluster-token
            - skydns-etcd
            volumeMounts:
            - name: etcd-storage
              mountPath: /var/etcd/data
          - name: kube2sky
            image: gcr.io/google_containers/kube2sky:1.14
            resources:
              # TODO: Set memory limits when we've profiled the container for large
              # clusters, then set request = limit to keep this container in
              # guaranteed class. Currently, this container falls into the
              # "burstable" category so the kubelet doesn't backoff from restarting
              # it.
              limits:
                cpu: 100m
                # Kube2sky watches all pods.
                memory: 200Mi
              requests:
                cpu: 100m
                memory: 50Mi
            livenessProbe:
              httpGet:
                path: /healthz
                port: 8080
                scheme: HTTP
              initialDelaySeconds: 60
              timeoutSeconds: 5
            volumeMounts:
            - name: kubernetes-etc
              mountPath: /etc/kubernetes
              readOnly: true
            - name: etcd-ssl
              mountPath: /etc/ssl/etcd
              readOnly: true
            readinessProbe:
              httpGet:
                path: /readiness
                port: 8081
                scheme: HTTP
              # we poll on pod startup for the Kubernetes master service and
              # only setup the /readiness HTTP server once that's available.
              initialDelaySeconds: 30
              timeoutSeconds: 5
            args:
            # command = "/kube2sky"
            - --domain=cluster.local.
            - --kubecfg-file=/etc/kubernetes/kube.conf
          - name: skydns
            image: gcr.io/google_containers/skydns:2015-10-13-8c72f8c
            resources:
              # TODO: Set memory limits when we've profiled the container for large
              # clusters, then set request = limit to keep this container in
              # guaranteed class. Currently, this container falls into the
              # "burstable" category so the kubelet doesn't backoff from restarting
              # it.
              limits:
                cpu: 100m
                memory: 200Mi
              requests:
                cpu: 100m
                memory: 50Mi
            args:
            # command = "/skydns"
            - -machines=http://127.0.0.1:4001
            - -addr=0.0.0.0:53
            - -ns-rotate=false
            - -domain=cluster.local
            ports:
            - containerPort: 53
              name: dns
              protocol: UDP
            - containerPort: 53
              name: dns-tcp
              protocol: TCP
          - name: healthz
            image: gcr.io/google_containers/exechealthz:1.0
            resources:
              # keep request = limit to keep this container in guaranteed class
              limits:
                cpu: 10m
                memory: 20Mi
              requests:
                cpu: 10m
                memory: 20Mi
            args:
            - -cmd=nslookup kubernetes.default.svc.cluster.local \
    127.0.0.1 >/dev/null
            - -port=8080
            ports:
            - containerPort: 8080
              protocol: TCP
          volumes:
          - name: etcd-storage
            emptyDir: {}
          - name: kubernetes-etc
            hostPath:
              path: /etc/kubernetes
          - name: etcd-ssl
            hostPath:
              path: /etc/ssl/etcd
          dnsPolicy: Default  # Don't use cluster DNS.
    
    apiVersion: v1
    kind: Pod
    metadata:
      name: kube-proxy
      namespace: kube-system
    spec:
      hostNetwork: true
      containers:
      - name: kube-proxy
        image: gcr.io/google_containers/hyperkube:v1.1.2
        command:
        - /hyperkube
        - proxy
        - --master=https://127.0.0.1:443
        - --proxy-mode=iptables
        - --kubeconfig=/etc/kubernetes/kube.conf
        securityContext:
          privileged: true
        volumeMounts:
        - mountPath: /etc/ssl/certs
          name: ssl-certs-host
          readOnly: true
        - mountPath: /etc/kubernetes
          name: kubernetes
          readOnly: true
        - mountPath: /etc/ssl/etcd
          name: kubernetes-certs
          readOnly: true
      volumes:
      - hostPath:
          path: /usr/share/ca-certificates
        name: ssl-certs-host
      - hostPath:
          path: /etc/kubernetes
        name: kubernetes
      - hostPath:
          path: /etc/ssl/etcd
        name: kubernetes-certs
    
    apiVersion: v1
    kind: Pod
    metadata:
      name: kube-proxy
      namespace: kube-system
    spec:
      hostNetwork: true
      containers:
      - name: kube-proxy
        image: gcr.io/google_containers/hyperkube:v1.1.2
        command:
        - /hyperkube
        - proxy
        - --kubeconfig=/etc/kubernetes/kube.conf
        - --proxy-mode=iptables
        - --v=2
        securityContext:
          privileged: true
        volumeMounts:
          - mountPath: /etc/ssl/certs
            name: "ssl-certs"
          - mountPath: /etc/kubernetes/kube.conf
            name: "kubeconfig"
            readOnly: true
          - mountPath: /etc/ssl/etcd
            name: "etc-kube-ssl"
            readOnly: true
      volumes:
        - name: "ssl-certs"
          hostPath:
            path: "/usr/share/ca-certificates"
        - name: "kubeconfig"
          hostPath:
            path: "/etc/kubernetes/kube.conf"
        - name: "etc-kube-ssl"
          hostPath:
            path: "/etc/ssl/etcd"