k 8 sノート-1を順番に手動でインストール
14248 ワード
私と同じように、手動でインストールするときに成功しなかった人はいますか(主に知識の蓄積が足りない)、さまざまな高可用性構成とさまざまな証明書権限にうとうとしています.このメモは、Kubernetesクラスタを手動でインストールする方法の多くを試みた結果、複雑な構成を簡略化し、基本的な機能を示すKubernetesプログラムを提示し、各コンポーネントを最も簡単に構成し、基本的な機能を実現する方法を記録したいと考えています.次に、マルチノード、セキュリティ認証、高可用性などの複雑な構成を徐々に追加し、Kubernetesのさまざまなインフラストラクチャ間の関係が構成されている方法を理解します.
計画の最初のステップは、非安全な単一master単一nodeクラスタを完了することであり、api-serverやkubeletなどのコンポーネントはsystemdで管理され、masterにはkubeletをインストールせずに管理側でのみ使用されます.まず、比較的新しい1.10を使ってみました.X版k 8 sはインストールされていますが、インストール中にapi-serverのアドレスを非証明書認証で指定することはできません.政府は非セキュリティ方式のサポートを徐々にキャンセルする意図があるようです.最後に、比較的古いk 8 s 1.6.0を選択してインストールを完了しました.
『Kubernetes権威ガイド』 Ubuntu 16.04.4 LTS kubernetes v1.6.0 etcd v3.0.14 docker-ce 18.06.1-ce
ホスト名
IPアドレス
ロール#ロール#
CPU/メモリ
u16-1
192.168.112.148
master(only as master)
2コア/2 G
u16-2
192.168.112.149
node
2コア/2 G
githubのKubernetesプロジェクトページから必要なV 1を見つけます.6.0バージョン、CHANGELOGをクリックし、Older releasesの下でCHANGELOG-1.6をクリックします.md、v 1が見つかりました.6.0バージョンのServer Binariesで対応するアーキテクチャのパッケージ(kubernetes-server-linux-amd 64.tar.gz)をダウンロードしてサーバにアップロードします(国内のインターネット環境では正常にダウンロードできない可能性があります)
k 8 s 1.6.0に対応するetcdバージョンはv 3である.0.14、github上のetcdプロジェクトの対応するバージョンのページからサーバにダウンロードすることもできます.
swapを閉じ、/etc/fstabファイルで自動マウントを解除
システムにSELinuxがインストールされている場合は、システムを閉じる必要があります.また、次の手順で使用するすべてのポートをファイアウォールで開放するか、ファイアウォール管理ソフトウェアを閉じる必要があります.ubuntu 16を選択します.04デフォルトufwオフ
次にsystemdサービスファイル/lib/systemd/systemd/systemm/etcdを設定.service
ここでWorkingDirectoryで指定したディレクトリは、etcdデータとして保存されるディレクトリとして事前に作成する必要があります.
EnvironmentFileでは、etcdのプロファイルを指定できます.私のところではインストールをテストするだけなので、etcdはデフォルトの構成を使用すればいいです.
systemdでetcdを起動し、起動するように設定します.
systemdサービスファイル/lib/systemd/systemd/systemm/kube-apiserverを編集します.service
環境変数ファイル/etc/kubernetes/apiserverで定義されているkube-apiserver起動パラメータKUBE_API_ARGS.このファイルを作成し、次のように記入します.
パラメータの説明:
--storage-backend:etcdバージョンを指定します.
--etcd-servers:etcdサーバのアドレスとポートを指定します.
--insecure-bind-address:api-serverが非安全にバインドされているアドレスを指定します.0.0.0.0はすべてのアドレスを表します.
--insecure-port:api-serverが非セキュリティで有効になっているポート番号を指定します.
--service-cluster-ip-range:クラスタCluster IPセグメントを指定し、後でネットワークプラグインを使用する必要がある場合は、ネットワークプラグインの要件に従ったセグメント構成が必要です.
--service-node-port-range:クラスタ内のServiceが物理マシンのポート番号範囲をマッピングできるように指定
--admission_コントロール:Kubernetesクラスタのアクセス制御設定は、各制御モジュールがプラグイン形式で順次有効になります.
--logtostderr:falseとして指定すると、標準出力ではなくログファイルにエラーログが書き込まれます.
--log-dir:ログ保存パス.
--v:ログレベル
システムdでkube-apiserverを起動し、POSTに設定します.
systemdサービスファイルの編集/lib/systemd/systemd/systemm/kube-controller-manager.service
環境変数ファイル/etc/kubernetes/controller-managerで定義されているkube-controller-manager起動パラメータKUBE_CONTROLLER_MANAGER_ARGS.このファイルを作成し、次のように記入します.
パラメータの説明:
--master:API-serverのURLアドレスを指定する
systemdサービスファイル/lib/systemd/systemd/systemm/kube-schedulerを編集します.service
環境変数ファイル/etc/kubernetes/schedulerでkube-scheduler起動パラメータKUBE_が定義されています.SCHEDULER_ARGS.このファイルを作成し、次のように記入します.
kube-controller-managerとkube-schedulerをインストールした後に起動し、POSTに設定します.
マスターのインストールが完了しました.次はnodeノードのインストールに必要なサービスを開始します.
Nodeノードにインストールする必要があるサービスはdocker、kubelet、kube-proxyです.
dockerをインストールする方法はたくさんあります.ここではアリクラウドを追加するソースを使用し、apt-getを使用してインストールします.
装着後dockerを押すと起動状態になり、POSTが設定されます.
systemdサービスファイル/lib/systemd/systemd/systemm/kubeletを編集します.service
WorkingDirectoryで指定したパスはkubeletのデータディレクトリで、サービス実行前に事前作成を作成する必要があります.
環境変数ファイル/etc/kubernetes/kubeletでkubelet起動パラメータKUBELET_が定義されていますARGS.このファイルを作成し、次のように記入します.
パラメータの説明:
--api-servers:apiserverのURLアドレスを指定します.
--hostname-override:apiserverに登録するときのこのノードの名前を指定します.
システムdでクbeletを起動し、起動するように設定します.
systemdサービスファイル/lib/systemd/systemd/systemm/kube-proxyを編集します.service
環境変数ファイル/etc/kubernetes/proxyで定義されているkube-proxy起動パラメータKUBE_PROXY_ARGS.このファイルを作成し、次のように記入します.
システムdでkubu-proxyを起動し、POSTに設定します.
Nodeノードの設定が完了すると、masterノードにkubernetesのコマンドライン管理ソフトウェアkubectlがあれば、kubectlを使用して新しく追加されたノードを表示できます.kubectlのバイナリファイルはkubernetes-server-linux-amd 64から使用できる.tar.gzで見つかりました.
このとき、新たに追加されたノードu 16−2の状態がNotReadyであり、コマンドによりnode状態が表示される
このときEvents:でエラーが表示されます.Massageは
Failed to start ContainerManager failed to initialise top level QOS containers: root container/kubepods doesn't exist
解決策はここを参考に、kubeletの起動パラメータに次のパラメータを加えて再起動します.
再起動するとnodeはReady状態になります.
Eventsのエラーが見つかりました.
Error creating: No API token found for service account "default", retry after the token is automatically created and added to the service account
解決策はここを参照してください.ここで構築されたクラスタ全体がセキュリティ認証されていないため、api-serverの--admission_コントロールパラメータのServiceAccountを削除し、kube-apiserverを再起動します.
その後deploymentステータスを再度表示
今回podは作成に成功しましたが、AVAILABLE状態ではありません.
このミラーのダウンロードに失敗した:gcr.io/google_containers/pause-amd64:3.0 .やはりネットワーク環境の問題で、dockerhub上で同じミラーを見つけてtagをダウンロードして修正してこのミラーを得ることができます.
ノード上で実行
ミラーがダウンロードされたら、deploymentステータスを再度表示します.
この時点でサービスは正しく導入されており、クラスタの外部からもサービスにアクセスできるように、NodePort方式でポートを露出する必要があります.
この時点でnodeの10412ポートが開いており(ここでの10412ポートはkube-apiserver起動パラメータであるservice-node-port-rangeの範囲内でランダムに割り当てられている)、nodeネイティブでアクセス可能である.ただし、クラスタ外部アクセスはタイムアウトし、kube-proxyがインストールされていないmasterアクセスもタイムアウトします.解決策はこちらを参考に.
安全のため、dockerは1.13バージョンの後、システムiptablesのFOrWARDチェーンのデフォルトポリシーをDROPに設定し、docker 0ブリッジに接続されたコンテナに放行ルールを追加しました.
なぜならdocker起動時にiptablesルールが変更された場合、dockerのサービスファイル/lib/systemd/systemm/dockerを変更できるからです.サービスは次の内容を追加します.
dockerを起動した後、FOrWARDチェーンを変更するデフォルトのルールがACCEPTであることを意味します.構成が完了したらdockerを再起動します.外部からアクセスできます.
これで、単一master単一nodeの非安全kubernetsクラスタの構成が完了し、インフラストラクチャが正常に使用されます.
計画の最初のステップは、非安全な単一master単一nodeクラスタを完了することであり、api-serverやkubeletなどのコンポーネントはsystemdで管理され、masterにはkubeletをインストールせずに管理側でのみ使用されます.まず、比較的新しい1.10を使ってみました.X版k 8 sはインストールされていますが、インストール中にapi-serverのアドレスを非証明書認証で指定することはできません.政府は非セキュリティ方式のサポートを徐々にキャンセルする意図があるようです.最後に、比較的古いk 8 s 1.6.0を選択してインストールを完了しました.
参考資料:
実行環境&ソフトウェアバージョン:
ロール計画:
ホスト名
IPアドレス
ロール#ロール#
CPU/メモリ
u16-1
192.168.112.148
master(only as master)
2コア/2 G
u16-2
192.168.112.149
node
2コア/2 G
環境準備
githubのKubernetesプロジェクトページから必要なV 1を見つけます.6.0バージョン、CHANGELOGをクリックし、Older releasesの下でCHANGELOG-1.6をクリックします.md、v 1が見つかりました.6.0バージョンのServer Binariesで対応するアーキテクチャのパッケージ(kubernetes-server-linux-amd 64.tar.gz)をダウンロードしてサーバにアップロードします(国内のインターネット環境では正常にダウンロードできない可能性があります)
k 8 s 1.6.0に対応するetcdバージョンはv 3である.0.14、github上のetcdプロジェクトの対応するバージョンのページからサーバにダウンロードすることもできます.
wget https://github.com/etcd-io/etcd/releases/download/v3.0.14/etcd-v3.0.14-linux-amd64.tar.gz
swapを閉じ、/etc/fstabファイルで自動マウントを解除
sudo swapoff -a
システムにSELinuxがインストールされている場合は、システムを閉じる必要があります.また、次の手順で使用するすべてのポートをファイアウォールで開放するか、ファイアウォール管理ソフトウェアを閉じる必要があります.ubuntu 16を選択します.04デフォルトufwオフ
sudo ufw disable
MASTERノードのインストール
etcdサービスのインストール
tar xf etcd-v3.0.14-linux-amd64.tar.gz
# etcd etcdctl /usr/bin
sudo cp etcd-v3.0.14-linux-amd64/etcd{,ctl} /usr/bin/
次にsystemdサービスファイル/lib/systemd/systemd/systemm/etcdを設定.service
[Unit]
Description=Etcd Server
After=network.target
[Service]
Type=notify
WorkingDirectory=/var/lib/etcd/
EnvironmentFile=-/etc/etcd/etcd.conf
ExecStart=/usr/bin/etcd
[Install]
WantedBy=multi-user.target
ここでWorkingDirectoryで指定したディレクトリは、etcdデータとして保存されるディレクトリとして事前に作成する必要があります.
EnvironmentFileでは、etcdのプロファイルを指定できます.私のところではインストールをテストするだけなので、etcdはデフォルトの構成を使用すればいいです.
systemdでetcdを起動し、起動するように設定します.
sudo systemctl daemon-reload
sudo systemctl start etcd
sudo systemctl enable etcd
#
systemctl status etcd
# etcdctl etcd
etcdctl cluster-health
# :
# member 8e9e05c52164694d is healthy: got healthy result from http://localhost:2379
# cluster is healthy
kube-apiserverサービスのインストール
tar xf kubernetes-server-linux-amd64.tar.gz
# kube-apiserver、kube-controller-manager kube-scheduler /usr/bin
sudo cp kubernetes/server/bin/kube-{apiserver,controller-manager,scheduler} /usr/bin/
systemdサービスファイル/lib/systemd/systemd/systemm/kube-apiserverを編集します.service
[Unit]
Description=Kubernetes API Server
After=etcd.service
Wants=etcd.service
[Service]
EnvironmentFile=/etc/kubernetes/apiserver
ExecStart=/usr/bin/kube-apiserver $KUBE_API_ARGS
Restart=on-failure
Type=notify
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
環境変数ファイル/etc/kubernetes/apiserverで定義されているkube-apiserver起動パラメータKUBE_API_ARGS.このファイルを作成し、次のように記入します.
KUBE_API_ARGS="--storage-backend=etcd3 --etcd-servers=http://127.0.0.1:2379 \
--insecure-bind-address=0.0.0.0 --insecure-port=8080 \
--service-cluster-ip-range=169.169.0.0/16 --service-node-port-range=1-65535 \
--admission_control=NamespaceLifecycle,LimitRanger,ServiceAccount, \
DefaultStorageClass,ResourceQuota \
--logtostderr=false --log-dir=/var/log/kubernetes --v=2"
パラメータの説明:
--storage-backend:etcdバージョンを指定します.
--etcd-servers:etcdサーバのアドレスとポートを指定します.
--insecure-bind-address:api-serverが非安全にバインドされているアドレスを指定します.0.0.0.0はすべてのアドレスを表します.
--insecure-port:api-serverが非セキュリティで有効になっているポート番号を指定します.
--service-cluster-ip-range:クラスタCluster IPセグメントを指定し、後でネットワークプラグインを使用する必要がある場合は、ネットワークプラグインの要件に従ったセグメント構成が必要です.
--service-node-port-range:クラスタ内のServiceが物理マシンのポート番号範囲をマッピングできるように指定
--admission_コントロール:Kubernetesクラスタのアクセス制御設定は、各制御モジュールがプラグイン形式で順次有効になります.
--logtostderr:falseとして指定すると、標準出力ではなくログファイルにエラーログが書き込まれます.
--log-dir:ログ保存パス.
--v:ログレベル
システムdでkube-apiserverを起動し、POSTに設定します.
sudo systemctl daemon-reload
sudo systemctl start kube-apiserver
sudo systemctl enable kube-apiserver
# status
systemctl status kube-apiserver
kube-controller-managerサービスのインストール
systemdサービスファイルの編集/lib/systemd/systemd/systemm/kube-controller-manager.service
[Unit]
Description=Kubernetes Controller Manager
After=kube-apiserver.service
Requires=kube-apiserver.service
[Service]
EnvironmentFile=/etc/kubernetes/controller-manager
ExecStart=/usr/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
環境変数ファイル/etc/kubernetes/controller-managerで定義されているkube-controller-manager起動パラメータKUBE_CONTROLLER_MANAGER_ARGS.このファイルを作成し、次のように記入します.
KUBE_CONTROLLER_MANAGER_ARGS="--master=http://192.168.112.148:8080 \
--logtostderr=false \
--log-dir=/var/log/kubernetes \
--v=2"
パラメータの説明:
--master:API-serverのURLアドレスを指定する
kube-schedulerサービスのインストール
systemdサービスファイル/lib/systemd/systemd/systemm/kube-schedulerを編集します.service
[Unit]
Description=Kubernetes Scheduler Server
After=kube-apiserver.service
Requires=kube-apiserver.service
[Service]
EnvironmentFile=/etc/kubernetes/scheduler
ExecStart=/usr/bin/kube-scheduler $KUBE_SCHEDULER_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
環境変数ファイル/etc/kubernetes/schedulerでkube-scheduler起動パラメータKUBE_が定義されています.SCHEDULER_ARGS.このファイルを作成し、次のように記入します.
KUBE_SCHEDULER_ARGS="--master=http://192.168.112.148:8080 \
--logtostderr=false \
--log-dir=/var/log/kubernetes \
--v=2"
kube-controller-managerとkube-schedulerをインストールした後に起動し、POSTに設定します.
sudo systemctl daemon-reload
sudo systemctl start kube-controller-manager kube-scheduler
sudo systemctl enable kube-controller-manager kube-scheduler
# , systemctl status XXXX
systemctl status kube-controller-manager
systemctl status kube-scheduler.service
マスターのインストールが完了しました.次はnodeノードのインストールに必要なサービスを開始します.
NODEノードのインストール
Nodeノードにインストールする必要があるサービスはdocker、kubelet、kube-proxyです.
docker-ceのインストール
dockerをインストールする方法はたくさんあります.ここではアリクラウドを追加するソースを使用し、apt-getを使用してインストールします.
# step 1:
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: GPG
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3:
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
装着後dockerを押すと起動状態になり、POSTが設定されます.
クbeletのインストール
tar xf kubernetes-server-linux-amd64.tar.gz
# kubelet kube-proxy /usr/bin
sudo cp kubernetes/server/bin/kube{let,-proxy} /usr/bin/
systemdサービスファイル/lib/systemd/systemd/systemm/kubeletを編集します.service
[Unit]
Description=Kubernetes Kubelet Server
After=docker.service
Requires=docker.service
[Service]
WorkingDirectory=/var/lib/kubelet
EnvironmentFile=/etc/kubernetes/kubelet
ExecStart=/usr/bin/kubelet $KUBELET_ARGS
Restart=on-failure
[Install]
WantedBy=mulit-user.target
WorkingDirectoryで指定したパスはkubeletのデータディレクトリで、サービス実行前に事前作成を作成する必要があります.
環境変数ファイル/etc/kubernetes/kubeletでkubelet起動パラメータKUBELET_が定義されていますARGS.このファイルを作成し、次のように記入します.
KUBELET_ARGS="--api-servers=http://192.168.112.148:8080 \
--hostname-override=u16-2 \
--logtostderr=false \
--log-dir=/var/log/kubernetes \
--v=2"
パラメータの説明:
--api-servers:apiserverのURLアドレスを指定します.
--hostname-override:apiserverに登録するときのこのノードの名前を指定します.
システムdでクbeletを起動し、起動するように設定します.
sudo systemctl daemon-reload
sudo systemctl start kubelet
sudo systemctl enable kubelet
# status
systemctl status kubelet
kube-proxyサービスのインストール
systemdサービスファイル/lib/systemd/systemd/systemm/kube-proxyを編集します.service
[Unit]
Description=Kubernetes Kube-Proxy Server
After=networking.service
Requires=networking.service
[Service]
EnvironmentFile=/etc/kubernetes/proxy
ExecStart=/usr/bin/kube-proxy $KUBE_PROXY_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
環境変数ファイル/etc/kubernetes/proxyで定義されているkube-proxy起動パラメータKUBE_PROXY_ARGS.このファイルを作成し、次のように記入します.
KUBE_PROXY_ARGS="--master=http://192.168.112.148:8080 \
--logtostderr=false \
--log-dir=/var/log/kubernetes \
--v=2"
システムdでkubu-proxyを起動し、POSTに設定します.
sudo systemctl daemon-reload
sudo systemctl start kube-proxy
sudo systemctl enable kube-proxy
# status
systemctl status kube-proxy
Nodeノードの設定が完了すると、masterノードにkubernetesのコマンドライン管理ソフトウェアkubectlがあれば、kubectlを使用して新しく追加されたノードを表示できます.kubectlのバイナリファイルはkubernetes-server-linux-amd 64から使用できる.tar.gzで見つかりました.
sudo cp kubernetes/server/bin/kubectl /usr/bin/
sudo chmod +x /usr/bin/kubectl
kubectl get node
#
# NAME STATUS AGE VERSION
# u16-2 NotReady 17m v1.6.0
このとき、新たに追加されたノードu 16−2の状態がNotReadyであり、コマンドによりnode状態が表示される
kubectl describe node u16-2
このときEvents:でエラーが表示されます.Massageは
Failed to start ContainerManager failed to initialise top level QOS containers: root container/kubepods doesn't exist
解決策はここを参考に、kubeletの起動パラメータに次のパラメータを加えて再起動します.
--cgroups-per-qos=false
--enforce-node-allocatable=""
再起動するとnodeはReady状態になります.
Kubernetesクラスタでのサービスの実行
サンプル・サービスの作成
# kubernetes-bootcamp
kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080
# dockerhub jocatalin/kubernetes-bootcamp:v1
kubectl run kubernetes-bootcamp --image=jocatalin/kubernetes-bootcamp:v1 --port=8080
# deployment
kubectl get deployment
# --- ---
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 1 0 0 0 4m
# Pod 0, deployment
kubectl describe deployment kubernetes-bootcamp
# Events Scaled up replica set kubernetes-bootcamp-4025819334 to 1 , replicaSet
kubectl describe replicaset kubernetes-bootcamp-4025819334
Eventsのエラーが見つかりました.
Error creating: No API token found for service account "default", retry after the token is automatically created and added to the service account
解決策はここを参照してください.ここで構築されたクラスタ全体がセキュリティ認証されていないため、api-serverの--admission_コントロールパラメータのServiceAccountを削除し、kube-apiserverを再起動します.
その後deploymentステータスを再度表示
kubectl get deployment
# --- ---
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 1 1 1 0 18m
今回podは作成に成功しましたが、AVAILABLE状態ではありません.
# pod
kubectl get pod
# --- ---
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-4025819334-q61xj 0/1 ContainerCreating 0 5m
# Pod
kubectl describe pod kubernetes-bootcamp-4025819334-q61xj
# Events :
# Error syncing pod, skipping: failed to "CreatePodSandbox" for "kubernetes-bootcamp-4025819334-q61xj_default(1d20e7af-af48-11e8-bf2f-000c29a01556)" with CreatePodSandboxError: "CreatePodSandbox for pod \"kubernetes-bootcamp-4025819334-q61xj_default(1d20e7af-af48-11e8-bf2f-000c29a01556)\" failed: rpc error: code = 2 desc = unable to pull sandbox image \"gcr.io/google_containers/pause-amd64:3.0\": Error response from daemon: {\"message\":\"Get https://gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)\"}"
このミラーのダウンロードに失敗した:gcr.io/google_containers/pause-amd64:3.0 .やはりネットワーク環境の問題で、dockerhub上で同じミラーを見つけてtagをダウンロードして修正してこのミラーを得ることができます.
ノード上で実行
sudo docker image pull mirrorgooglecontainers/pause-amd64:3.0
sudo docker tag mirrorgooglecontainers/pause-amd64:3.0 gcr.io/google_containers/pause-amd64:3.0
ミラーがダウンロードされたら、deploymentステータスを再度表示します.
kubectl get deployment
# --- ---
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 1 1 1 1 35m
ノードにポートを露出する
この時点でサービスは正しく導入されており、クラスタの外部からもサービスにアクセスできるように、NodePort方式でポートを露出する必要があります.
kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
kubectl get service
# --- ---
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 169.169.0.1 443/TCP 2d
kubernetes-bootcamp 169.169.210.120 8080:10412/TCP 12m
この時点でnodeの10412ポートが開いており(ここでの10412ポートはkube-apiserver起動パラメータであるservice-node-port-rangeの範囲内でランダムに割り当てられている)、nodeネイティブでアクセス可能である.ただし、クラスタ外部アクセスはタイムアウトし、kube-proxyがインストールされていないmasterアクセスもタイムアウトします.解決策はこちらを参考に.
安全のため、dockerは1.13バージョンの後、システムiptablesのFOrWARDチェーンのデフォルトポリシーをDROPに設定し、docker 0ブリッジに接続されたコンテナに放行ルールを追加しました.
なぜならdocker起動時にiptablesルールが変更された場合、dockerのサービスファイル/lib/systemd/systemm/dockerを変更できるからです.サービスは次の内容を追加します.
ExecStartPost=/sbin/iptables -P FORWARD ACCEPT
dockerを起動した後、FOrWARDチェーンを変更するデフォルトのルールがACCEPTであることを意味します.構成が完了したらdockerを再起動します.外部からアクセスできます.
これで、単一master単一nodeの非安全kubernetsクラスタの構成が完了し、インフラストラクチャが正常に使用されます.