Kubernetesオブジェクトのサービス
3061 ワード
このセクションを学習する前に、Pod、ReplicaSet、Labelについて基本的な知識を持っていることを確認してください.具体的には、以下の記事を参照してください. KubernetesオブジェクトのPod KubernetesオブジェクトのReplicaSet Kubernetes基本概念のLabel 以前の学習では、ReplicaSetを使用してPodのセットを作成し、可用性の高いサービスを提供することができました.各Podには個別のPod IPが割り当てられるが、次の2つの問題がある. Pod IPはクラスタ内に見られる仮想IPのみであり,外部からアクセスできない. Pod IPはPodの破棄に伴って消失し、ReplicaSetがPodを動的に伸縮すると、Pod IPはいつでもどこでも変化する可能性があり、このサービスへのアクセスが困難になります.
したがって,Kubernetesにおけるサービスオブジェクトは,以上の問題を解決する核心的な鍵である.
1.サービスの作成
サービスは、同じサービスを提供するPod対外アクセスインタフェースのセットと見なすことができる.サービスにより、アプリケーションはサービス発見と負荷分散を容易に実現できます.
Serviceは他のKubernetesオブジェクトと同様にyamlまたはjsonファイルで定義されます.また、他のControllerオブジェクトと同様に、Label Selectorを使用して、サービスがどのPodを使用するかを決定します.簡単なサービス定義は次のとおりです.
上のサービス記述ファイルを簡単に分析します.は、
2.サービスのタイプ
Serive定義では、4つのオプションを持つ ClusterIP.既定値.このサービスには、Kubernetesシステムが自動的に割り当てた仮想IPであるCluster IPが割り当てられているため、クラスタ内でのみアクセスできます. NodePort.指定したノードのポートを介してサービスを外部に露出します.この方法により、いずれの LoadBalancer.NodePortに基づいて、cloud providerを使用して外部の負荷イコライザを作成し、リクエストをNodePortに転送します.このモードはクラウドサーバ(AWSなど)でのみ使用できます. ExternalName.サービスをDNS CNAMEレコード方式で指定したドメイン名に転送します(spec.externlName設定).kube-dnsバージョンが1.7以上必要です.
2.1 NodePortタイプ
サービスの定義時にspec.type=NodePortを指定し、spec.portsを指定します.NodePortの値では、Kubernetesはクラスタ内の各ノードに定義されたこのポートを開き、外部から任意の
3つのapp:nginx Podが3つの異なるノードで実行されている場合、クライアントが任意のノードにアクセスする30001ポートがこのnginxサービスにアクセスできます.
2.2 LoadBalancerタイプ
クラウドサービスプロバイダが外部負荷イコライザをサポートしている場合、spec.type=LoadBalancerでServiceを定義できます.簡単な例は次のとおりです.
参考記事 https://kubernetes.io/docs/concepts/services-networking/service/ https://kubernetes.feisky.xyz/zh/concepts/service.html
したがって,Kubernetesにおけるサービスオブジェクトは,以上の問題を解決する核心的な鍵である.
1.サービスの作成
サービスは、同じサービスを提供するPod対外アクセスインタフェースのセットと見なすことができる.サービスにより、アプリケーションはサービス発見と負荷分散を容易に実現できます.
Serviceは他のKubernetesオブジェクトと同様にyamlまたはjsonファイルで定義されます.また、他のControllerオブジェクトと同様に、Label Selectorを使用して、サービスがどのPodを使用するかを決定します.簡単なサービス定義は次のとおりです.
apiVersion: v1
kind: Service
metadata:
labels:
run: nginx
name: nginx-service
spec:
ports:
- port: 80
protocol: TCP
targetPort: 81
selector:
app: nginx
type: ClusterIP
上のサービス記述ファイルを簡単に分析します.
spec.selector
フィールドを使用して、このサービスがどのLabelを使用するかを決定します.この例では、nginxというサービスは、app: nginx
Labelを持つすべてのPodを管理します.spec.ports.port: 80
は、このサービスが80ポートをリスニングし、すべてのリスニングされた要求を管理するPodに転送することを示す.spec.ports.targetPort: 81
は、このサービスが傍受した80ポートの要求が管理するPodの81ポートに転送されることを示しており、このフィールドは省略でき、省略するとspec.ports.port
の値に設定される.type: ClusterIP
表面このサービスのtypeは、以下で説明する.2.サービスのタイプ
Serive定義では、4つのオプションを持つ
spec.type
フィールドを指定する必要があります.NodeIP:nodePort
にアクセスしても、ClusterIPにルーティングされ、サービスが正常に取得される.2.1 NodePortタイプ
サービスの定義時にspec.type=NodePortを指定し、spec.portsを指定します.NodePortの値では、Kubernetesはクラスタ内の各ノードに定義されたこのポートを開き、外部から任意の
NodeIP:nodePort
を介してこのサービスにアクセスできます.簡単な例を次に示します.apiVersion: v1
kind: Service
metadata:
name: nginx-service
labels:
run: nginx
spec:
selector:
app: nginx
ports:
- port: 80
nodePort: 30001
type: NodePort
3つのapp:nginx Podが3つの異なるノードで実行されている場合、クライアントが任意のノードにアクセスする30001ポートがこのnginxサービスにアクセスできます.
2.2 LoadBalancerタイプ
クラウドサービスプロバイダが外部負荷イコライザをサポートしている場合、spec.type=LoadBalancerでServiceを定義できます.簡単な例は次のとおりです.
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
clusterIP: 10.0.171.239
loadBalancerIP: 78.11.24.19
type: LoadBalancer
status:
loadBalancer:
ingress:
- ip: 146.148.47.155
参考記事