web-dev-qa-db-ja.com

Kubernetes:ホストへのルートなし

ベアメタルKubernetesカスタムセットアップ(Kubernetes the Hard Wayを使用して手動でクラスターをセットアップ)があります。すべてが機能しているように見えますが、外部からサービスにアクセスすることはできません。

Curlのときにサービスのリストを取得できます。

https://<ip-addr>/api/v1/namespaces/kube-system/services

ただし、プロキシしようとすると(kubectl proxyを使用し、<master-ip-address>:<port>も使用して):

https://<ip-addr>/api/v1/namespaces/kube-system/services/toned-gecko-grafana:80/proxy/

私は得る:

Error: 'dial tcp 10.44.0.16:3000: connect: no route to Host'
Trying to reach: 'http://10.44.0.16:3000/'
  • 通常http://10.44.0.16:3000/をカールしても、同じエラーが発生します。これは、KubernetesがインストールされているVMの内側からカールするかどうかの結果です。 これを解決できました。以下を確認してください。

  • NodePortを使用して外部からサービスにアクセスできます。

  • Nginx-Ingressを通じてサービスを公開すると、サービスにアクセスできます。

  • WeaveをCNIとして使用していますが、ログは正常でしたが、最初は名前空間にアクセスできない(RBACエラー)というログ行がいくつかありました。その後、ログは正常でしたが。

  • CoreDNSを使用すると、ログは正常に見えます。 APIServerとKubeletのログは正常に見えます。 Kubernetes-Eventsも正常に見えます。

  • 追加メモ:割り当てられたDNSサービス-IPは10.3.0.10であり、サービスIP範囲は10.3.0.0/24で、PODネットワークは10.2.0.0/16です。 10.44.x.xが何なのか、どこから来たのかわかりません。

サービスの1つからの出力は次のとおりです。

{
  "kind": "Service",
  "apiVersion": "v1",
  "metadata": {
    "name": "kubernetes-dashboard",
    "namespace": "kube-system",
    "selfLink": "/api/v1/namespaces/kube-system/services/kubernetes-dashboard",
    "uid": "5c8bb34f-c6a2-11e8-84a7-00163cb4ceeb",
    "resourceVersion": "7054",
    "creationTimestamp": "2018-10-03T00:22:07Z",
    "labels": {
      "addonmanager.kubernetes.io/mode": "Reconcile",
      "k8s-app": "kubernetes-dashboard",
      "kubernetes.io/cluster-service": "true"
    },
    "annotations": {
      "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Service\",\"metadata\":{\"annotations\":{},\"labels\":{\"addonmanager.kubernetes.io/mode\":\"Reconcile\",\"k8s-app\":\"kubernetes-dashboard\",\"kubernetes.io/cluster-service\":\"true\"},\"name\":\"kubernetes-dashboard\",\"namespace\":\"kube-system\"},\"spec\":{\"ports\":[{\"port\":443,\"targetPort\":8443}],\"selector\":{\"k8s-app\":\"kubernetes-dashboard\"}}}\n"
    }
  },
  "spec": {
    "ports": [
      {
        "protocol": "TCP",
        "port": 443,
        "targetPort": 8443,
        "nodePort": 30033
      }
    ],
    "selector": {
      "k8s-app": "kubernetes-dashboard"
    },
    "clusterIP": "10.3.0.30",
    "type": "NodePort",
    "sessionAffinity": "None",
    "externalTrafficPolicy": "Cluster"
  },
  "status": {
    "loadBalancer": {

    }
  }
}

これをデバッグする方法はわかりませんが、正しい方向へのいくつかのポインターが役立つでしょう。他に何かが必要な場合は、お知らせください。


kubectl get svcからの出力:

NAME                   TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
coredns-primary        ClusterIP   10.3.0.10    <none>        53/UDP,53/TCP,9153/TCP   4h51m
kubernetes-dashboard   NodePort    10.3.0.30    <none>        443:30033/TCP            4h51m

編集:

CoreDNSを実行しているにもかかわらず、何らかの理由でkube-dnsサービスを実行していないことがわかりました。ここに記載されているとおりでした: https://github.com/kubernetes/kubeadm/issues/1056#issuecomment-413235119

これでVMの中から首尾よくカールできますが、プロキシアクセスでは同じエラーが引き続き発生します:No route to Host。ここではDNSが機能していないと思われますが、問題に関する問題は修正されました。

8

kubectl proxyを使用している場合、デフォルトで127.0.0.1:8001をHTTP Kube API URLとして使用する必要があります。 http://127.0.0.1:8001へのリクエストは認証ヘッダーで拡張され、APIサーバーに渡されます。したがって、httpsとapi ipではなくhttp://127.0.0.1:8001/api/v1/namespaces/kube-system/services/toned-gecko-grafana:80/proxy/を試してください。

また、kubeノードにsocatがインストールされていることを確認してください。