[MEMO] katacodaでLearn Kubernetes ver2 Service / Networking
Deploy Containers Using YAML
memo
apiVersion: extensions/v1beta1 kind: Deployment kind: Service spec: type: NodePort
kubectl create -f {file} kubectl apply -f {file}
Service
- kubernetes内部でお互いのpodsにselectorを使って、ポートを割り当てることができる。selectorを使わずに、Endpointsを使って、外部に対するアクセスを割り当てることができる。基本的には、kubenetesのpods通しでのアクセスをサポートするために使われる。
https://kubernetes.io/docs/concepts/services-networking/service/#services-without-selectors
Type
読んだことメモ。
- ClusterIP: クラスター内でアクセスできるIPを作る。デフォルト
- NodePort: StaticPortを割り当てる。外部からもそのNodeのIPとPortを指定すればアクセスできる。
: . - LoadBalancer: クラウドプロバイダーのLBを使って外部に公開できる。(?)NodePortとClusterIPが自動で作られる
- ExternalName: サービスを外部のドメインに紐付ける。
https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types
Networking Introduction
- Cluster IP
ClusterIPは内部のPodに対して、内部からのアクセスをロードバランスするIP、ポートを用意すること
- Target Ports
portだけをしているすると、podのポートとserviceのポート両方が同じポートになる。 targetPortを指定すると、podのポートはtargetPortが利用される。
spec: ports: - port: 8080 targetPort: 80
- NodePort
ClusterIPとTargetPortは内部からのアクセスに対応した手法である。NodePortは外部からのアクセスを可能にするStaticIPを用意する。すべてのノードのPortを専有するかも?要検証。
spec: type: NodePort ports: - port: 80 nodePort: 30080
同じポートを指定するNodePortを作ろうとしたが、エラー出たのでたぶん、全Nodeであってる。
master $ cat nodeport2.yaml | grep nodePort -A2 -B2 ports: - port: 80 nodePort: 30080 selector: app: webapp2-nodeport master $ cat nodeport.yaml | grep nodePort -A2 -B2 ports: - port: 80 nodePort: 30080 selector: app: webapp1-nodeport master $ kubectl create -f nodeport2.yaml Error from server (Invalid): error when creating "nodeport2.yaml": Service "webapp2-nodeport-svc" is invalid: spec.ports[0].nodePort: Invalid value: 30080: provided port is already allocated Error from server (AlreadyExists): error when creating "nodeport2.yaml": deployments.extensions "webapp2-nodeport-deployment" already exists
- External IPs
指定のIPのポートを外部公開し、内部のPodにアクセスする。
spec: ports: - port: 80 externalIPs: - {NODE_IP}
- Load Balancer
GCPやAzure、AWSなどで外部のロードバランサーを通してLBSする機能。それがない場合でも、quay.io/munnerz/keepalived-cloud-provider:0.0.1
このimageを使うことで、cloudproviderを内部に作成できるみたい。
https://github.com/munnerz/keepalived-cloud-provider
spec: type: LoadBalancer ports: - port: 80