Kube-ipamは、etcd分布式記憶に基づいて、クラスタ内のIPアドレスの一意性を確保するために、kubernetes動的IPネットワーク割当管理を実現する。Kub-ipamは、kubernetesクラスタ内のPod固定IPアドレスをサポートし、同時に、resolv.confのDNS構成をサポートする。
English Documents | 繁體中文檔案 | 简体中文文档 | 日本語の文書
いくつかのシーンではIPアドレスに依存していますが、固定IPアドレスのPodを使うと、Kube-ipam
を使って簡単にこのような問題を解決できます。例えば、mysql主従構造の時、主databaseとdatabaseの間の同期;例えば、keepalivedがクラスタHAをするとき、2つのノード間で通信などを検出する。例えば、いくつかのセキュリティ保護装置は、IPアドレスに基づいてネットワークセキュリティアクセスポリシーの制限を行うシーンなどが必要です。
Kube-ipam
はetcd分布式記憶に基づいて、kubernetes動的IPネットワーク割り当て管理を実現し、kubernetesクラスタ内のPodが固定的なIPアドレスを持つことを確保する。kube-ipam配置を使用した後、上図のfixed-in Podは破壊再構築後も元のIPアドレスの固定を維持することができます。
あなたのkubelet
が正しくnetwork-plugin
とcni-conf-dir
とcni-bin-dir
パラメータを配置していることを確認してください。以下に‘kubelet’の構成例を示します。参考にしてください:
# cat /etc/systemd/system/kubelet.service
…
ExecStart=/usr/local/bin/kubelet \
…
--network-plugin=cni \
--cni-conf-dir=/etc/cni/net.d \
--cni-bin-dir=/opt/cni/bin/ \
…
ダウンロードまたはコンパイルを通じて、kube-i pam
のバイナリファイルを取得して、k 8 s-nodeホストの`/opt/cni/bin/ディレクトリにコピーしてください。
# wget https://github.com/cloudnativer/kube-ipam/releases/download/v0.2.0/kube-ipam-v0.2.0-x86.tgz
# tar -zxvf kube-ipam-v0.2.0-x86.tgz
# mv kube-ipam-v0.2.0-x86/kube-ipam /opt/cni/bin/kube-ipam
あなたはsubnet
パラメータでIPサブネットの情報を設定し、gateway
を通じてゲートウェイの情報を設定することができます。etcdConfigでETcdの証明書とendpointアドレスを設定できます。 すべてのk8s-nodeホストの
/etc/cni/net.d/1-kube-ipam.conf`ファイルを編集します。
# cat /etc/cni/net.d/1-kube-ipam.conf
{
"cniVersion":"0.3.1",
"name": "k8snetwork",
"type": "macvlan",
"master": "eth0",
"ipam": {
"name": "kube-subnet",
"type": "kube-ipam",
"kubeConfig": "/etc/kubernetes/pki/kubectl.kubeconfig"
"etcdConfig": {
"etcdURL": "https://192.168.1.50:2379,https://192.168.1.58:2379,https://192.168.1.63:2379",
"etcdCertFile": "/etc/kubernetes/pki/etcd.pem",
"etcdKeyFile": "/etc/kubernetes/pki/etcd-key.pem",
"etcdTrustedCAFileFile": "/etc/kubernetes/pki/ca.pem"
},
"subnet": "10.188.0.0/16",
"fixedStart": "10.188.0.10",
"fixedEnd": "10.188.0.255",
"rangeStart": "10.188.1.0",
"rangeEnd": "10.188.255.254",
"gateway": "10.188.0.1",
"routes": [{
"dst": "0.0.0.0/0"
}],
"resolvConf": "/etc/resolv.conf"
}
}
type
(string, required): CNIプラグインの種類を記入します。例えば、macvlan、ipvlan、kube-router、bridge、calicoなどです(Multius
と組み合わせてより多くのCNIプラグインをサポートすることもできます)。routes
(string, optional): コンテナの名前空間のルートリストに追加します。各ルーティングは、dst
とオプションのgw
フィールドを有するものである。gw
を省略すると、「ゲートウェイ」の値が使用されます。resolvConf
(string, optional): ホスト上で解析され、DNS構成として返されるresov.co nf
ファイルパス。etcdConfig
:etcdアドレス情報の対象etcdURL
(string, required): etcdのendpoint URLアドレスです。etcdCertFile
(string, required): etcdのcertファイル。etcdKeyFile
(string, required): etcdのkeyファイル。etcdTrustedCAFileFile
(string, required): etcdのcaファイル。kubeConfig
(string, required): kubernetesのcertファイル。
ranges
, (array, required, nonempty) an array of arrays of range objects:subnet
(string, required): 割り当てられたCIDRブロックです。rangeStart
(string, optional):subnet
サブネットから配信されるIPアドレスは、デフォルトではsubnet
サブネット内の「.2」というIPアドレスです。rangeEnd
(string, optional):subnet
子ネットの中から分配のIPアドレスを終わって、デフォルトはsubnet
子ネットの中の“.254”のこのIPアドレスです。gateway
(string, optional):subnet
サブネットから割り当てられたゲートウェイのIPアドレスは、デフォルトではsubnet
サブネット内の「.1」というIPアドレスです。
ヒント: ranges
は、multiple-subnetsドキュメントを参照して、複数のサブネットの構成フォーマットをサポートします。
pod IPアドレスの固定割り当ては、podのannotations
にkube-ipam.ip
を配置し、kube-ipam.netmark
とkube-ipam.gateway
パラメータを配置することで実現できます。
/etc/cni/net.d/1-kube-ipam.com.com
において、ランダムIPアドレスの範囲はrangestart
とrangeend
に設定されている。rangestart
とrangeend
のIPアドレスセグメントには設定されていません。固定IPの容器に手動で割り当てられます。
言い換えれば、podのIPアドレスを固定したいなら、kube-i pam.ip
の値をrangestart
とrangeend
の範囲に設定しないでください。
新しいfixed-i-p-test-Deployment.yaml
を作成して、固定IPのPodを作成します。
# cat fixed-ip-test-Deployment.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: fixed-ip-test
namespace: default
labels:
k8s-app: cloudnativer-test
spec:
replicas: 1
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
selector:
matchLabels:
k8s-app: cloudnativer-test
template:
metadata:
labels:
k8s-app: cloudnativer-test
annotations:
kube-ipam.ip: "10.188.0.216"
kube-ipam.netmask: "255.255.0.0"
kube-ipam.gateway: "10.188.0.1"
spec:
containers:
- name: fixed-ip-test
image: nginx:1.7.9
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 80
---
この例では、10.188.00/16のセグメントで、10.188.0.10~10.188.0.200以外のIPアドレスをPodに割り当てることができます。
説明:ランダムIPのPodを作成するには、annotationsのkube-i pam.ip
、kube-ipam.netmark
とkube-ipam.gateway
を削除して配置すればいいです。
kubectlアプリ-f
コマンドを使って固定IPのPodを作成します。
# kubectl apply -f fixed-ip-test-Deployment.yaml
#
# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
fixed-ip-test-6d9b74fd4d-dbbsd 1/1 Running 0 2d23h 10.188.0.216 192.168.20.21
現在、このfixed-inp-test-6 d 9 b 74 fd 4 d-dbbbbbsというPodは固定不変のIPアドレスを割り当てられました(10.188.0.216)。
ここではもう一つの例があります。calico
CNI環境でkube-ipam
を使って容器IPを固定する例があります。<a href=“docs/kubeipam-with-calico.md">ここをクリックしてみてください。
例えば、上記のPodを削除するためにkubectl delete
コマンドを使用します。kubernetesは新しいPodを自動的に再構築します。
# kubectl delete pod fixed-ip-test-6d9b74fd4d-dbbsd
#
# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
fixed-ip-test-6d9b74fd4d-xjhek 1/1 Running 0 1h 10.188.0.216 192.168.30.35
この時、新たに起動されたfixed-ip-test-6d9b74fd4d-xjhekというPodのIPアドレスは依然として10.188.0.216です。
k8s-nodeホスト上の/var/log/kube-ipam.log
ファイルを見て、kube-ipam
のシステムログ情報を得ることができます。
`kube-ipam`は`Multius`と結合してネットワークを組むことができ、より多くのCNIプラグインシーンでのコンテナIPアドレスの固定をサポートすることができます。例えば、私たちは、`kube-ipam`と`Multius`に基づいて、Webとデータベースの階層ネットワークセキュリティアクセスアーキテクチャを実現し、Podが同時にランダムIPと固定IPなどの複数のネットワークインターフェースをサポートするようにすることができる。このような配置は、アプリケーションネットワークやデータベースなど複数のネットワーク領域を相互に分離し、コンテナクラスターネットワークアーキテクチャを効果的に制御するために、セキュリティ要員が有利である。
上の図は、各Podが2つのインターフェースを有することを示している eth 0、net 1。eth 0は外部ユーザとしてweb podのネットワークインターフェースにアクセスする。一方、net 1は付加的なコンテナネットワークカードであり、web Podとしてdatabase Podまでの内部ネットワーク通信である。
ユーザは、ingressまたはserviceを介してウェブサービスにアクセスすることができる。web podは、databaseエリアネットワークを通じて、固定IPアドレスのdatabaseサービスにアクセスすることができます。Database領域ネットワークのdatabase Podは、互いに固定IPアドレスを介してクラスタの通信動作を行うことができる。階層ネットワークセキュリティアクセスアーキテクチャのインストールと配置はここをクリックしてください。
使用中に問題があったら,をクリックしてもいいですhttps://github.com/cloudnativer/kube-install/issuesIssuesを提出してもいいです。Forkソースコードを修正してBUGを修復してみて、PRを提出してください。
# git clone your-fork-code
# git checkout -b your-new-branch
# git commit -am "Fix bug or add some feature"
# git push origin your-new-branch
IssuesとPRを提出してください。
貢献者の皆様、ありがとうございます。