SlideShare a Scribd company logo
1 of 21
Download to read offline
Hardware LoadBalancer で
“type LoadBalancer”を
使ってみた
青山 真也 (Masaya Aoyama)
普段の主な仕事↓
← 結果待ち
adtech studio のプライベートクラウド環境
・OpenStack をベースとしたプライベートクラウド環境
・Network のレイテンシが許容されないアドテクシステム
そんな弊社にも
GKE ライクなコンテナ基盤がございます。
AKE (Adtech Container Engine)
This is a slide title
AKE の中でも、
LoadBalancer 周りの話をします。
AKE 1.0 の構成 (NodePort + Metal LB)
eth0: 10.0.0.1:34567
VM α
Kubernets node
Internal
VM β
Kubernets node
52.0.0.1:80
LoadBalancer
External
apiVersion: v1
kind: Service
metadata:
name: svc1
spec:
type: NodePort
ports:
- name: "http-port"
protocol: "TCP"
port: 80
targetPort: 80
52.0.0.1:80
> 10.0.0.1:34567
> 10.0.0.2:34567
(cli で登録が必要)
eth0: 10.0.0.2:34567
AKE 1.0 の構成 (NodePort + Metal LB + (HAProxy))
VM α
Kubernets node
Internal
VM β
Kubernets node
52.0.0.1:80
LoadBalancer
(+ HAProxy)
External
52.0.0.1:80
> 10.0.0.1:34567
> 10.0.0.2:34567
(cli で登録が必要)
apiVersion: v1
kind: Service
metadata:
name: svc1
spec:
type: NodePort
ports:
- name: "http-port"
protocol: "TCP"
port: 80
targetPort: 80
eth0: 10.0.0.1:34567 eth0: 10.0.0.2:34567
SNAT, NAPT ができない場合
VM α
Kubernets node
Internal
VM β
Kubernets node
52.0.0.1:80
LoadBalancer
External
仮に Service が増えたことを考えると、
こんな感じになります
52.0.0.1:80
> VM α:80
> VM β:80
52.0.0.2:80
> VM α:80
> VM β:80
lo.0: 52.0.0.1:80
lo.1: 52.0.0.2:80
lo.0: 52.0.0.1:80
lo.1: 52.0.0.2:80
SNAT, NAPT ができない場合
VM α
Kubernets node
Internal
VM β
Kubernets node
52.0.0.1:80
LoadBalancer
External
52.0.0.1:80
> VM α:80
> VM β:80
52.0.0.2:80
> VM α:80
> VM β:80
NodePort は Interface 全てで
Bind されてしまうため利用出来ない
例: *:80
apiVersion: v1
kind: Service
metadata:
name: svc2
spec:
type: NodePort
ports:
- name: "http-port"
protocol: "TCP"
port: 80
targetPort: 80
apiVersion: v1
kind: Service
metadata:
name: svc1
spec:
type: NodePort
ports:
- name: "http-port"
protocol: "TCP"
port: 80
targetPort: 80
lo.0: 52.0.0.1:80
lo.1: 52.0.0.2:80
lo.0: 52.0.0.1:80
lo.1: 52.0.0.2:80
SNAT, NAPT ができない場合
VM α
Kubernets node
Internal
VM β
Kubernets node
52.0.0.1:80
LoadBalancer
External
externalIPs 使えば
いけないことも無いが …
利便性が著しく低い
…
metadata:
name: svc1
spec:
externalIPs:
- 52.0.0.1
ports:
- name: "http-port"
protocol: "TCP"
port: 80
targetPort: 80
52.0.0.1:80
> VM α:80
> VM β:80
52.0.0.2:80
> VM α:80
> VM β:80
…
metadata:
name: svc2
spec:
externalIPs:
- 52.0.0.2
ports:
- name: "http-port"
protocol: "TCP"
port: 80
targetPort: 80
lo.0: 52.0.0.1:80
lo.1: 52.0.0.2:80
lo.0: 52.0.0.1:80
lo.1: 52.0.0.2:80
おいでおいで〜
…
This is a slide title
① SNAT, NAPT が必須な構成
ボトルネック or リソースが必要
② 外部のコマンドでやってもらうの不便
やっぱりGKE がいいって言われる
VM α
Kubernets node
Internal
VM β
Kubernets node
52.0.0.1:80
LoadBalancer
External
52.0.0.1:80
> VM α:80
> VM β:80
52.0.0.2:80
> VM α:80
> VM β:80
apiVersion: v1
kind: Service
metadata:
name: svc2
spec:
type: ClusterIP
ports:
- name: "http-port"
protocol: "TCP"
port: 80
targetPort: 80
apiVersion: v1
kind: Service
metadata:
name: svc1
spec:
type: ClusterIP
ports:
- name: "http-port"
protocol: "TCP"
port: 80
targetPort: 80
AKE 2.0 の構成 (NodePort + Metal LB)
VM α
Kubernets node
Internal
VM β
Kubernets node
52.0.0.1:80
LoadBalancer
External
52.0.0.1:80
> VM α:80
> VM β:80
52.0.0.2:80
> VM α:80
> VM β:80
apiVersion: v1
kind: Service
metadata:
name: svc2
spec:
type: ClusterIP
ports:
- name: "http-port"
protocol: "TCP"
port: 80
targetPort: 80
apiVersion: v1
kind: Service
metadata:
name: svc1
spec:
type: ClusterIP
ports:
- name: "http-port"
protocol: "TCP"
port: 80
targetPort: 80
AKE 2.0 の構成 (NodePort + Metal LB)
自前で動的に iptables を書き換えて頑張る
(listen しない、ClusterIP を利用)
52.0.0.1:80 宛にきたパケットを
該当 Service の KUBE-SVC-* に転送
This is a slide title
① SNAT, NAPT が必須な構成
ボトルネック or リソースが必要
② 外部のコマンドでやってもらうの不便
やっぱりGKE がいいって言われる
This is a slide title
① 外部 LoadBalancer の操作
② IP 払い出しの自動化
③ K8s Node の iptables 操作
This is a slide titleやっぱ諦められないよ
type LoadBalancer
type LoadBalancer のつくりかた
CloudProvider を自作しましょう。
● LoadBalancer (今回はここの話)
● Routing
● Host
● Zone
● BlockDevice
(参考)
インターフェースの一覧: pkg/cloudprovider/cloud.go
OpenStack の場合、pkg/cloudprovider/providers/openstack/* 辺り
LoadBalancer 用の Interface
GetLoadBalancer(clusterName string, service *v1.Service)
 ・あまり変える部分はない
EnsureLoadBalancer(clusterName string, service *v1.Service, nodes []*v1.Node)
 ・LoadBalancer を作成する、IP の指定がない場合は自動アサイン
UpdateLoadBalancer(clusterName string, service *v1.Service, nodes []*v1.Node)
 ・LoadBalancer を更新する
EnsureLoadBalancerDeleted(clusterName string, service *v1.Service)
 ・LoadBalancer を削除する
大まかには上記 3 種類の Interface を実装してあげる形
渡ってくる構造体に必要な情報は大体揃っている
service.Name
service.Spec.LoadBalancerIP
service.Spec.Ports[].Port
service.Spec.Ports[].TargetPort
nodes.[].Name
This is a slide title
この 4 つの関数を作ると
VM α
Kubernets node
Internal
VM β
Kubernets node
52.0.0.1:80
LoadBalancer
External
52.0.0.1:80
> VM α:80
> VM β:80
52.0.0.2:80
> VM α:80
> VM β:80
apiVersion: v1
kind: Service
metadata:
name: svc2
spec:
type: LoadBalancer
ports:
- name: "http-port"
protocol: "TCP"
port: 80
targetPort: 80
apiVersion: v1
kind: Service
metadata:
name: svc1
spec:
type: LoadBalancer
ports:
- name: "http-port"
protocol: "TCP"
port: 80
targetPort: 80
AKE 3.0 の構成 (LoadBalancer + Metal LB)
GKE などと全く同じ type LoadBalancer
今後オンプレにより求められるのは、
パブリッククラウドとのシームレスな統合
コンテナ環境だとなおさら移行し易い
GKE > AKE & AKE > GKE
これでマルチクラウドでの展開も容易に

More Related Content

What's hot

GKEで半年運用してみた
GKEで半年運用してみたGKEで半年運用してみた
GKEで半年運用してみたKatsutoshi Nagaoka
 
OpenStack概要 ~仮想ネットワーク~
OpenStack概要 ~仮想ネットワーク~OpenStack概要 ~仮想ネットワーク~
OpenStack概要 ~仮想ネットワーク~Masaya Aoyama
 
Kubernetesのワーカーノードを自動修復するために必要だったこと
Kubernetesのワーカーノードを自動修復するために必要だったことKubernetesのワーカーノードを自動修復するために必要だったこと
Kubernetesのワーカーノードを自動修復するために必要だったことh-otter
 
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!Kohei Tokunaga
 
IBM Log Analysis with LogDNAを評価した話
 IBM Log Analysis with LogDNAを評価した話 IBM Log Analysis with LogDNAを評価した話
IBM Log Analysis with LogDNAを評価した話Daisuke Hiraoka
 
kpackによるコンテナイメージのビルド
kpackによるコンテナイメージのビルドkpackによるコンテナイメージのビルド
kpackによるコンテナイメージのビルドMasanori Nara
 
1st OCDET Baremetal MTG OpenStack baremetal compute by GMO AppsCloud
1st OCDET Baremetal MTG OpenStack baremetal compute by GMO AppsCloud1st OCDET Baremetal MTG OpenStack baremetal compute by GMO AppsCloud
1st OCDET Baremetal MTG OpenStack baremetal compute by GMO AppsCloudNaoto Gohko
 
NSX-Tから見たvSphere with Kubernetesのネットワーキング
NSX-Tから見たvSphere with KubernetesのネットワーキングNSX-Tから見たvSphere with Kubernetesのネットワーキング
NSX-Tから見たvSphere with KubernetesのネットワーキングTomoyuki Tanigaki
 
Japan Container Day 2018
Japan Container Day 2018Japan Container Day 2018
Japan Container Day 2018Yoshio Terada
 
OpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニック
OpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニックOpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニック
OpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニックEtsuji Nakai
 
Okinawa Open Days 2014 OpenStackハンズオンセミナー / OpenStackの機能概要
Okinawa Open Days 2014 OpenStackハンズオンセミナー / OpenStackの機能概要Okinawa Open Days 2014 OpenStackハンズオンセミナー / OpenStackの機能概要
Okinawa Open Days 2014 OpenStackハンズオンセミナー / OpenStackの機能概要Etsuji Nakai
 
サーバ脆弱性スキャナ Vuls を OpenStack 環境で使ってみた
サーバ脆弱性スキャナ Vuls を OpenStack 環境で使ってみたサーバ脆弱性スキャナ Vuls を OpenStack 環境で使ってみた
サーバ脆弱性スキャナ Vuls を OpenStack 環境で使ってみたVirtualTech Japan Inc.
 
”30分”ぐらいでわかる「Kubernetes」について
”30分”ぐらいでわかる「Kubernetes」について”30分”ぐらいでわかる「Kubernetes」について
”30分”ぐらいでわかる「Kubernetes」についてYuya Ohara
 
Dockerの利用事例
Dockerの利用事例Dockerの利用事例
Dockerの利用事例maebashi
 
Azure Fabric Service Reliable Collection
Azure Fabric Service Reliable CollectionAzure Fabric Service Reliable Collection
Azure Fabric Service Reliable CollectionTakekazu Omi
 
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~Masahito Zembutsu
 
Kubernetes introduction
Kubernetes introductionKubernetes introduction
Kubernetes introductionDAEBUM LEE
 

What's hot (20)

GKEで半年運用してみた
GKEで半年運用してみたGKEで半年運用してみた
GKEで半年運用してみた
 
OpenStack概要 ~仮想ネットワーク~
OpenStack概要 ~仮想ネットワーク~OpenStack概要 ~仮想ネットワーク~
OpenStack概要 ~仮想ネットワーク~
 
Kubernetesのワーカーノードを自動修復するために必要だったこと
Kubernetesのワーカーノードを自動修復するために必要だったことKubernetesのワーカーノードを自動修復するために必要だったこと
Kubernetesのワーカーノードを自動修復するために必要だったこと
 
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!
 
IBM Log Analysis with LogDNAを評価した話
 IBM Log Analysis with LogDNAを評価した話 IBM Log Analysis with LogDNAを評価した話
IBM Log Analysis with LogDNAを評価した話
 
kpackによるコンテナイメージのビルド
kpackによるコンテナイメージのビルドkpackによるコンテナイメージのビルド
kpackによるコンテナイメージのビルド
 
1st OCDET Baremetal MTG OpenStack baremetal compute by GMO AppsCloud
1st OCDET Baremetal MTG OpenStack baremetal compute by GMO AppsCloud1st OCDET Baremetal MTG OpenStack baremetal compute by GMO AppsCloud
1st OCDET Baremetal MTG OpenStack baremetal compute by GMO AppsCloud
 
Twemproxy (nutcracker)
Twemproxy (nutcracker)Twemproxy (nutcracker)
Twemproxy (nutcracker)
 
NSX-Tから見たvSphere with Kubernetesのネットワーキング
NSX-Tから見たvSphere with KubernetesのネットワーキングNSX-Tから見たvSphere with Kubernetesのネットワーキング
NSX-Tから見たvSphere with Kubernetesのネットワーキング
 
Japan Container Day 2018
Japan Container Day 2018Japan Container Day 2018
Japan Container Day 2018
 
OpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニック
OpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニックOpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニック
OpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニック
 
Okinawa Open Days 2014 OpenStackハンズオンセミナー / OpenStackの機能概要
Okinawa Open Days 2014 OpenStackハンズオンセミナー / OpenStackの機能概要Okinawa Open Days 2014 OpenStackハンズオンセミナー / OpenStackの機能概要
Okinawa Open Days 2014 OpenStackハンズオンセミナー / OpenStackの機能概要
 
サーバ脆弱性スキャナ Vuls を OpenStack 環境で使ってみた
サーバ脆弱性スキャナ Vuls を OpenStack 環境で使ってみたサーバ脆弱性スキャナ Vuls を OpenStack 環境で使ってみた
サーバ脆弱性スキャナ Vuls を OpenStack 環境で使ってみた
 
Docker 1.12 の衝撃
Docker 1.12 の衝撃Docker 1.12 の衝撃
Docker 1.12 の衝撃
 
VyOSでMPLS
VyOSでMPLSVyOSでMPLS
VyOSでMPLS
 
”30分”ぐらいでわかる「Kubernetes」について
”30分”ぐらいでわかる「Kubernetes」について”30分”ぐらいでわかる「Kubernetes」について
”30分”ぐらいでわかる「Kubernetes」について
 
Dockerの利用事例
Dockerの利用事例Dockerの利用事例
Dockerの利用事例
 
Azure Fabric Service Reliable Collection
Azure Fabric Service Reliable CollectionAzure Fabric Service Reliable Collection
Azure Fabric Service Reliable Collection
 
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
 
Kubernetes introduction
Kubernetes introductionKubernetes introduction
Kubernetes introduction
 

Viewers also liked

Githubを使って簡単に helm repoを公開してみよう
Githubを使って簡単に helm repoを公開してみようGithubを使って簡単に helm repoを公開してみよう
Githubを使って簡単に helm repoを公開してみようShingo Omura
 
Kubernetes etc.. & rancher 2.0 technical preview
Kubernetes etc.. & rancher 2.0 technical previewKubernetes etc.. & rancher 2.0 technical preview
Kubernetes etc.. & rancher 2.0 technical previewcyberblack28 Ichikawa
 
10分でわかる Cilium と XDP / BPF
10分でわかる Cilium と XDP / BPF10分でわかる Cilium と XDP / BPF
10分でわかる Cilium と XDP / BPFShuji Yamada
 
コンテナ時代だからこそ要注目! Cloud Foundry
コンテナ時代だからこそ要注目! Cloud Foundryコンテナ時代だからこそ要注目! Cloud Foundry
コンテナ時代だからこそ要注目! Cloud FoundryKazuto Kusama
 
Kubernetesを触ってみた
Kubernetesを触ってみたKubernetesを触ってみた
Kubernetesを触ってみたKazuto Kusama
 
Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説
Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説
Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説Samir Hammoudi
 
OpenStack Summit Sydney Report (NEC鳥居) - OpenStack最新情報セミナー
OpenStack Summit Sydney Report (NEC鳥居) - OpenStack最新情報セミナーOpenStack Summit Sydney Report (NEC鳥居) - OpenStack最新情報セミナー
OpenStack Summit Sydney Report (NEC鳥居) - OpenStack最新情報セミナーVirtualTech Japan Inc.
 
DockerとKubernetesが作る未来
DockerとKubernetesが作る未来DockerとKubernetesが作る未来
DockerとKubernetesが作る未来Kazuto Kusama
 
最近のJuju/MAASについて 〜 15分版 - OpenStack最新情報セミナー 2017年11月
最近のJuju/MAASについて 〜 15分版 - OpenStack最新情報セミナー 2017年11月最近のJuju/MAASについて 〜 15分版 - OpenStack最新情報セミナー 2017年11月
最近のJuju/MAASについて 〜 15分版 - OpenStack最新情報セミナー 2017年11月VirtualTech Japan Inc.
 
Kubernetesにまつわるエトセトラ(主に苦労話)
Kubernetesにまつわるエトセトラ(主に苦労話)Kubernetesにまつわるエトセトラ(主に苦労話)
Kubernetesにまつわるエトセトラ(主に苦労話)Works Applications
 

Viewers also liked (10)

Githubを使って簡単に helm repoを公開してみよう
Githubを使って簡単に helm repoを公開してみようGithubを使って簡単に helm repoを公開してみよう
Githubを使って簡単に helm repoを公開してみよう
 
Kubernetes etc.. & rancher 2.0 technical preview
Kubernetes etc.. & rancher 2.0 technical previewKubernetes etc.. & rancher 2.0 technical preview
Kubernetes etc.. & rancher 2.0 technical preview
 
10分でわかる Cilium と XDP / BPF
10分でわかる Cilium と XDP / BPF10分でわかる Cilium と XDP / BPF
10分でわかる Cilium と XDP / BPF
 
コンテナ時代だからこそ要注目! Cloud Foundry
コンテナ時代だからこそ要注目! Cloud Foundryコンテナ時代だからこそ要注目! Cloud Foundry
コンテナ時代だからこそ要注目! Cloud Foundry
 
Kubernetesを触ってみた
Kubernetesを触ってみたKubernetesを触ってみた
Kubernetesを触ってみた
 
Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説
Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説
Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説
 
OpenStack Summit Sydney Report (NEC鳥居) - OpenStack最新情報セミナー
OpenStack Summit Sydney Report (NEC鳥居) - OpenStack最新情報セミナーOpenStack Summit Sydney Report (NEC鳥居) - OpenStack最新情報セミナー
OpenStack Summit Sydney Report (NEC鳥居) - OpenStack最新情報セミナー
 
DockerとKubernetesが作る未来
DockerとKubernetesが作る未来DockerとKubernetesが作る未来
DockerとKubernetesが作る未来
 
最近のJuju/MAASについて 〜 15分版 - OpenStack最新情報セミナー 2017年11月
最近のJuju/MAASについて 〜 15分版 - OpenStack最新情報セミナー 2017年11月最近のJuju/MAASについて 〜 15分版 - OpenStack最新情報セミナー 2017年11月
最近のJuju/MAASについて 〜 15分版 - OpenStack最新情報セミナー 2017年11月
 
Kubernetesにまつわるエトセトラ(主に苦労話)
Kubernetesにまつわるエトセトラ(主に苦労話)Kubernetesにまつわるエトセトラ(主に苦労話)
Kubernetesにまつわるエトセトラ(主に苦労話)
 

Similar to Kubernetes をいじって Hardware LoadBalancer で "type LoadBalancer" を実現してみた @Kubernetes meetup #7

サイバーエージェントにおけるプライベートコンテナ基盤AKEを支える技術
サイバーエージェントにおけるプライベートコンテナ基盤AKEを支える技術サイバーエージェントにおけるプライベートコンテナ基盤AKEを支える技術
サイバーエージェントにおけるプライベートコンテナ基盤AKEを支える技術Masaya Aoyama
 
OpenStack上に展開するContainer as a Service を本番で利用するために必要だったこと
OpenStack上に展開するContainer as a Service を本番で利用するために必要だったことOpenStack上に展開するContainer as a Service を本番で利用するために必要だったこと
OpenStack上に展開するContainer as a Service を本番で利用するために必要だったことMasaya Aoyama
 
Kubernetesと閉域網
Kubernetesと閉域網Kubernetesと閉域網
Kubernetesと閉域網Han Li
 
Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動Tech Summit 2016
 
OCP Serverを用いた OpenStack Containerの検証
 OCP Serverを用いたOpenStack Containerの検証 OCP Serverを用いたOpenStack Containerの検証
OCP Serverを用いた OpenStack Containerの検証Takashi Sogabe
 
「Docker +VLAN 環境」アプリケーション実行環境の構築
「Docker +VLAN 環境」アプリケーション実行環境の構築「Docker +VLAN 環境」アプリケーション実行環境の構築
「Docker +VLAN 環境」アプリケーション実行環境の構築Fuva Brain
 
Openvswitch vps 20120429資料
Openvswitch vps 20120429資料Openvswitch vps 20120429資料
Openvswitch vps 20120429資料Daisuke Nakajima
 
Java on Kubernetes on Azure
Java on Kubernetes on AzureJava on Kubernetes on Azure
Java on Kubernetes on AzureYoshio Terada
 
JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要Shumpei Shiraishi
 
FD.io VPP事始め
FD.io VPP事始めFD.io VPP事始め
FD.io VPP事始めtetsusat
 
Jaws−横浜ハンズオンーCloudFormation w/ VPC 3/3
Jaws−横浜ハンズオンーCloudFormation w/ VPC 3/3Jaws−横浜ハンズオンーCloudFormation w/ VPC 3/3
Jaws−横浜ハンズオンーCloudFormation w/ VPC 3/3Yasuhiro Araki, Ph.D
 
AKS と ACI を組み合わせて使ってみた
AKS と ACI を組み合わせて使ってみたAKS と ACI を組み合わせて使ってみた
AKS と ACI を組み合わせて使ってみたHideaki Aoyagi
 
Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf)
Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf) Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf)
Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf) VirtualTech Japan Inc.
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Masahito Zembutsu
 
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説Takao Tetsuro
 
JOSUG 9th Study
JOSUG 9th StudyJOSUG 9th Study
JOSUG 9th Studyirix_jp
 
ASP.NET vNextの全貌
ASP.NET vNextの全貌ASP.NET vNextの全貌
ASP.NET vNextの全貌A AOKI
 
NetBackup AIR CLI
NetBackup AIR CLINetBackup AIR CLI
NetBackup AIR CLIvxsejapan
 

Similar to Kubernetes をいじって Hardware LoadBalancer で "type LoadBalancer" を実現してみた @Kubernetes meetup #7 (20)

サイバーエージェントにおけるプライベートコンテナ基盤AKEを支える技術
サイバーエージェントにおけるプライベートコンテナ基盤AKEを支える技術サイバーエージェントにおけるプライベートコンテナ基盤AKEを支える技術
サイバーエージェントにおけるプライベートコンテナ基盤AKEを支える技術
 
OpenStack上に展開するContainer as a Service を本番で利用するために必要だったこと
OpenStack上に展開するContainer as a Service を本番で利用するために必要だったことOpenStack上に展開するContainer as a Service を本番で利用するために必要だったこと
OpenStack上に展開するContainer as a Service を本番で利用するために必要だったこと
 
Kubernetesと閉域網
Kubernetesと閉域網Kubernetesと閉域網
Kubernetesと閉域網
 
Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動
 
OCP Serverを用いた OpenStack Containerの検証
 OCP Serverを用いたOpenStack Containerの検証 OCP Serverを用いたOpenStack Containerの検証
OCP Serverを用いた OpenStack Containerの検証
 
「Docker +VLAN 環境」アプリケーション実行環境の構築
「Docker +VLAN 環境」アプリケーション実行環境の構築「Docker +VLAN 環境」アプリケーション実行環境の構築
「Docker +VLAN 環境」アプリケーション実行環境の構築
 
Ansible npstudy-shtsuchi
Ansible npstudy-shtsuchiAnsible npstudy-shtsuchi
Ansible npstudy-shtsuchi
 
OpenStack API
OpenStack APIOpenStack API
OpenStack API
 
Openvswitch vps 20120429資料
Openvswitch vps 20120429資料Openvswitch vps 20120429資料
Openvswitch vps 20120429資料
 
Java on Kubernetes on Azure
Java on Kubernetes on AzureJava on Kubernetes on Azure
Java on Kubernetes on Azure
 
JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要
 
FD.io VPP事始め
FD.io VPP事始めFD.io VPP事始め
FD.io VPP事始め
 
Jaws−横浜ハンズオンーCloudFormation w/ VPC 3/3
Jaws−横浜ハンズオンーCloudFormation w/ VPC 3/3Jaws−横浜ハンズオンーCloudFormation w/ VPC 3/3
Jaws−横浜ハンズオンーCloudFormation w/ VPC 3/3
 
AKS と ACI を組み合わせて使ってみた
AKS と ACI を組み合わせて使ってみたAKS と ACI を組み合わせて使ってみた
AKS と ACI を組み合わせて使ってみた
 
Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf)
Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf) Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf)
Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf)
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
 
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
 
JOSUG 9th Study
JOSUG 9th StudyJOSUG 9th Study
JOSUG 9th Study
 
ASP.NET vNextの全貌
ASP.NET vNextの全貌ASP.NET vNextの全貌
ASP.NET vNextの全貌
 
NetBackup AIR CLI
NetBackup AIR CLINetBackup AIR CLI
NetBackup AIR CLI
 

More from Masaya Aoyama

ServiceMesh と仲間たち 〜Istio & Conduit & Linkerd〜 @Cloud Native Meetup Tokyo #1
ServiceMesh と仲間たち 〜Istio & Conduit & Linkerd〜 @Cloud Native Meetup Tokyo #1ServiceMesh と仲間たち 〜Istio & Conduit & Linkerd〜 @Cloud Native Meetup Tokyo #1
ServiceMesh と仲間たち 〜Istio & Conduit & Linkerd〜 @Cloud Native Meetup Tokyo #1Masaya Aoyama
 
KubeCon Recap for Istio and K8s network performance @Kubernetes Meetup #11
KubeCon Recap for Istio and K8s network performance @Kubernetes Meetup #11KubeCon Recap for Istio and K8s network performance @Kubernetes Meetup #11
KubeCon Recap for Istio and K8s network performance @Kubernetes Meetup #11Masaya Aoyama
 
5分でわかる Capabilities と Privilege + KubeCon Recap
5分でわかる Capabilities と Privilege + KubeCon Recap5分でわかる Capabilities と Privilege + KubeCon Recap
5分でわかる Capabilities と Privilege + KubeCon RecapMasaya Aoyama
 
Recap: [Code fresh] Deploying to kubernetes thousands of times per day @kuber...
Recap: [Code fresh] Deploying to kubernetes thousands of times per day @kuber...Recap: [Code fresh] Deploying to kubernetes thousands of times per day @kuber...
Recap: [Code fresh] Deploying to kubernetes thousands of times per day @kuber...Masaya Aoyama
 
Kube con + cloudnativecon 2017 社内報告会(外部公開用)
Kube con + cloudnativecon 2017 社内報告会(外部公開用)Kube con + cloudnativecon 2017 社内報告会(外部公開用)
Kube con + cloudnativecon 2017 社内報告会(外部公開用)Masaya Aoyama
 
Datadog による Container の監視について
Datadog による Container の監視についてDatadog による Container の監視について
Datadog による Container の監視についてMasaya Aoyama
 
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜Masaya Aoyama
 
Certified XXX まわりのはなし Kubernetes Invitational Meetup #2
Certified XXX まわりのはなし Kubernetes Invitational Meetup #2Certified XXX まわりのはなし Kubernetes Invitational Meetup #2
Certified XXX まわりのはなし Kubernetes Invitational Meetup #2Masaya Aoyama
 

More from Masaya Aoyama (8)

ServiceMesh と仲間たち 〜Istio & Conduit & Linkerd〜 @Cloud Native Meetup Tokyo #1
ServiceMesh と仲間たち 〜Istio & Conduit & Linkerd〜 @Cloud Native Meetup Tokyo #1ServiceMesh と仲間たち 〜Istio & Conduit & Linkerd〜 @Cloud Native Meetup Tokyo #1
ServiceMesh と仲間たち 〜Istio & Conduit & Linkerd〜 @Cloud Native Meetup Tokyo #1
 
KubeCon Recap for Istio and K8s network performance @Kubernetes Meetup #11
KubeCon Recap for Istio and K8s network performance @Kubernetes Meetup #11KubeCon Recap for Istio and K8s network performance @Kubernetes Meetup #11
KubeCon Recap for Istio and K8s network performance @Kubernetes Meetup #11
 
5分でわかる Capabilities と Privilege + KubeCon Recap
5分でわかる Capabilities と Privilege + KubeCon Recap5分でわかる Capabilities と Privilege + KubeCon Recap
5分でわかる Capabilities と Privilege + KubeCon Recap
 
Recap: [Code fresh] Deploying to kubernetes thousands of times per day @kuber...
Recap: [Code fresh] Deploying to kubernetes thousands of times per day @kuber...Recap: [Code fresh] Deploying to kubernetes thousands of times per day @kuber...
Recap: [Code fresh] Deploying to kubernetes thousands of times per day @kuber...
 
Kube con + cloudnativecon 2017 社内報告会(外部公開用)
Kube con + cloudnativecon 2017 社内報告会(外部公開用)Kube con + cloudnativecon 2017 社内報告会(外部公開用)
Kube con + cloudnativecon 2017 社内報告会(外部公開用)
 
Datadog による Container の監視について
Datadog による Container の監視についてDatadog による Container の監視について
Datadog による Container の監視について
 
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
 
Certified XXX まわりのはなし Kubernetes Invitational Meetup #2
Certified XXX まわりのはなし Kubernetes Invitational Meetup #2Certified XXX まわりのはなし Kubernetes Invitational Meetup #2
Certified XXX まわりのはなし Kubernetes Invitational Meetup #2
 

Kubernetes をいじって Hardware LoadBalancer で "type LoadBalancer" を実現してみた @Kubernetes meetup #7

  • 1. Hardware LoadBalancer で “type LoadBalancer”を 使ってみた
  • 2. 青山 真也 (Masaya Aoyama) 普段の主な仕事↓ ← 結果待ち
  • 3. adtech studio のプライベートクラウド環境 ・OpenStack をベースとしたプライベートクラウド環境 ・Network のレイテンシが許容されないアドテクシステム そんな弊社にも GKE ライクなコンテナ基盤がございます。 AKE (Adtech Container Engine)
  • 4. This is a slide title AKE の中でも、 LoadBalancer 周りの話をします。
  • 5. AKE 1.0 の構成 (NodePort + Metal LB) eth0: 10.0.0.1:34567 VM α Kubernets node Internal VM β Kubernets node 52.0.0.1:80 LoadBalancer External apiVersion: v1 kind: Service metadata: name: svc1 spec: type: NodePort ports: - name: "http-port" protocol: "TCP" port: 80 targetPort: 80 52.0.0.1:80 > 10.0.0.1:34567 > 10.0.0.2:34567 (cli で登録が必要) eth0: 10.0.0.2:34567
  • 6. AKE 1.0 の構成 (NodePort + Metal LB + (HAProxy)) VM α Kubernets node Internal VM β Kubernets node 52.0.0.1:80 LoadBalancer (+ HAProxy) External 52.0.0.1:80 > 10.0.0.1:34567 > 10.0.0.2:34567 (cli で登録が必要) apiVersion: v1 kind: Service metadata: name: svc1 spec: type: NodePort ports: - name: "http-port" protocol: "TCP" port: 80 targetPort: 80 eth0: 10.0.0.1:34567 eth0: 10.0.0.2:34567
  • 7. SNAT, NAPT ができない場合 VM α Kubernets node Internal VM β Kubernets node 52.0.0.1:80 LoadBalancer External 仮に Service が増えたことを考えると、 こんな感じになります 52.0.0.1:80 > VM α:80 > VM β:80 52.0.0.2:80 > VM α:80 > VM β:80 lo.0: 52.0.0.1:80 lo.1: 52.0.0.2:80 lo.0: 52.0.0.1:80 lo.1: 52.0.0.2:80
  • 8. SNAT, NAPT ができない場合 VM α Kubernets node Internal VM β Kubernets node 52.0.0.1:80 LoadBalancer External 52.0.0.1:80 > VM α:80 > VM β:80 52.0.0.2:80 > VM α:80 > VM β:80 NodePort は Interface 全てで Bind されてしまうため利用出来ない 例: *:80 apiVersion: v1 kind: Service metadata: name: svc2 spec: type: NodePort ports: - name: "http-port" protocol: "TCP" port: 80 targetPort: 80 apiVersion: v1 kind: Service metadata: name: svc1 spec: type: NodePort ports: - name: "http-port" protocol: "TCP" port: 80 targetPort: 80 lo.0: 52.0.0.1:80 lo.1: 52.0.0.2:80 lo.0: 52.0.0.1:80 lo.1: 52.0.0.2:80
  • 9. SNAT, NAPT ができない場合 VM α Kubernets node Internal VM β Kubernets node 52.0.0.1:80 LoadBalancer External externalIPs 使えば いけないことも無いが … 利便性が著しく低い … metadata: name: svc1 spec: externalIPs: - 52.0.0.1 ports: - name: "http-port" protocol: "TCP" port: 80 targetPort: 80 52.0.0.1:80 > VM α:80 > VM β:80 52.0.0.2:80 > VM α:80 > VM β:80 … metadata: name: svc2 spec: externalIPs: - 52.0.0.2 ports: - name: "http-port" protocol: "TCP" port: 80 targetPort: 80 lo.0: 52.0.0.1:80 lo.1: 52.0.0.2:80 lo.0: 52.0.0.1:80 lo.1: 52.0.0.2:80
  • 11. This is a slide title ① SNAT, NAPT が必須な構成 ボトルネック or リソースが必要 ② 外部のコマンドでやってもらうの不便 やっぱりGKE がいいって言われる
  • 12. VM α Kubernets node Internal VM β Kubernets node 52.0.0.1:80 LoadBalancer External 52.0.0.1:80 > VM α:80 > VM β:80 52.0.0.2:80 > VM α:80 > VM β:80 apiVersion: v1 kind: Service metadata: name: svc2 spec: type: ClusterIP ports: - name: "http-port" protocol: "TCP" port: 80 targetPort: 80 apiVersion: v1 kind: Service metadata: name: svc1 spec: type: ClusterIP ports: - name: "http-port" protocol: "TCP" port: 80 targetPort: 80 AKE 2.0 の構成 (NodePort + Metal LB)
  • 13. VM α Kubernets node Internal VM β Kubernets node 52.0.0.1:80 LoadBalancer External 52.0.0.1:80 > VM α:80 > VM β:80 52.0.0.2:80 > VM α:80 > VM β:80 apiVersion: v1 kind: Service metadata: name: svc2 spec: type: ClusterIP ports: - name: "http-port" protocol: "TCP" port: 80 targetPort: 80 apiVersion: v1 kind: Service metadata: name: svc1 spec: type: ClusterIP ports: - name: "http-port" protocol: "TCP" port: 80 targetPort: 80 AKE 2.0 の構成 (NodePort + Metal LB) 自前で動的に iptables を書き換えて頑張る (listen しない、ClusterIP を利用) 52.0.0.1:80 宛にきたパケットを 該当 Service の KUBE-SVC-* に転送
  • 14. This is a slide title ① SNAT, NAPT が必須な構成 ボトルネック or リソースが必要 ② 外部のコマンドでやってもらうの不便 やっぱりGKE がいいって言われる
  • 15. This is a slide title ① 外部 LoadBalancer の操作 ② IP 払い出しの自動化 ③ K8s Node の iptables 操作
  • 16. This is a slide titleやっぱ諦められないよ type LoadBalancer
  • 17. type LoadBalancer のつくりかた CloudProvider を自作しましょう。 ● LoadBalancer (今回はここの話) ● Routing ● Host ● Zone ● BlockDevice (参考) インターフェースの一覧: pkg/cloudprovider/cloud.go OpenStack の場合、pkg/cloudprovider/providers/openstack/* 辺り
  • 18. LoadBalancer 用の Interface GetLoadBalancer(clusterName string, service *v1.Service)  ・あまり変える部分はない EnsureLoadBalancer(clusterName string, service *v1.Service, nodes []*v1.Node)  ・LoadBalancer を作成する、IP の指定がない場合は自動アサイン UpdateLoadBalancer(clusterName string, service *v1.Service, nodes []*v1.Node)  ・LoadBalancer を更新する EnsureLoadBalancerDeleted(clusterName string, service *v1.Service)  ・LoadBalancer を削除する 大まかには上記 3 種類の Interface を実装してあげる形 渡ってくる構造体に必要な情報は大体揃っている service.Name service.Spec.LoadBalancerIP service.Spec.Ports[].Port service.Spec.Ports[].TargetPort nodes.[].Name
  • 19. This is a slide title この 4 つの関数を作ると
  • 20. VM α Kubernets node Internal VM β Kubernets node 52.0.0.1:80 LoadBalancer External 52.0.0.1:80 > VM α:80 > VM β:80 52.0.0.2:80 > VM α:80 > VM β:80 apiVersion: v1 kind: Service metadata: name: svc2 spec: type: LoadBalancer ports: - name: "http-port" protocol: "TCP" port: 80 targetPort: 80 apiVersion: v1 kind: Service metadata: name: svc1 spec: type: LoadBalancer ports: - name: "http-port" protocol: "TCP" port: 80 targetPort: 80 AKE 3.0 の構成 (LoadBalancer + Metal LB) GKE などと全く同じ type LoadBalancer