Service
3518 ワード
サービスとは,Podをネットワークサービスに暴露し,外部からPodに要求を送信できるようにするオブジェクトである.
このサービスの代わりにPodのIPアドレスを使用することが考えられるが、この方法は、動作段階において非常に非効率であり、管理されない. Podは常に削除され、再実行されます. すなわち、IPアドレスは随時変更可能である. PodのIPアドレスは、ノード上でPodが予め定められた後に割り当てられる. が再起動したPodのIPアドレスを正確に知ることができません. 負荷バランシングをサポートする必要があります.
ほとんどのサービス呼び出しと同じクライアントは、単一のエンドポイントを呼び出す必要があります. これらの理由から、Kubernetesはサービスというオブジェクトを提供しています.
このサービスオブジェクトは、外部に露出したIPに割り当てられ、このIP送信要求によって同じサービスによって管理されるPodに要求が割り当てられる.
(サービス管理の意味はlabelセレクタに指定されたpodです.)
サービスメンテナンス中に作成されたIPアドレスは変更されません.
特定のクライアントのすべてのリクエストを同じpodに転送するためのプロパティ.
クライアントがどのように負荷を分散しても、
session Affinityのプロパティから、クッキーに基づいてルーティングできるかどうかはわかりますが、サービスオブジェクトはHTTPレベルで実行されるオブジェクトではないため、クッキーはサポートされていません.実際のサービスは、TCP、UDPのパケットのみを転送し、負荷、ファーストクラスに関心を持たない.
サービスのIPは変更されませんが、PodのIPアドレスはいつでも変更される可能性があります.
では、サービスはどのようにして要求を送信するPodのIPアドレスを確定しますか?
Podが実行されると、kubernetesは環境変数を初期化し、この時点で存在する各サービスを示す.
サービスは、この環境変数を参照してpodのIPを取得します.
kubernetesのDNSサービスを実行すると、クラスタ内で実行されるすべてのpodがDNSサーバを自動的に有効にします.
podでDNSサービスを使用する場合、まずkubernetes内部DNSを使用するので、クラスタ内部でもDNSを使用することができる.
クラスタ内で使用可能なDNS.
ドメインのパターンは
サービスオブジェクトとEndpointオブジェクトを構成することで、外部からアクセスできるエンドポイントを作成できます.
サービスがIPアドレスではなくFQDNを使用する場合、クラスタのDNSを使用してマッピングすることができる.
外部からアクセス可能なサービスを構成する方法は3つあります.
クラスタ-内部IPにサービスを暴露し、cluter内部からのアクセスのみを許可します.
各ノードからポートを開き、そのポートに送信されたリクエストを各サービスに送信する方法.
クラウド環境で使用する方法により、クラウドが提供するloadイコライザをサービスとしてアクセスできます.このとき、NodePortと同様に、LoadBarangerからのリクエストがノードのPortに送信される.クラウド環境で提供されるKubernetes(EKS,AKS)は、サービスオブジェクトの作成時にloadイコライザを自動的に作成してマッピングします.
HTTPレベルでの動作対象.Ingressの重要な点は、1つのパブリックIPだけですべてのリクエストを受信して転送できることです.loadイコライザを使用する場合は、各エンドポイントに共通IPを割り当てる必要があります.リクエストをどのサービスに転送するかを判断するためにhostとpathを解析する共通IPが割り当てられる.このインポートがHTTPSをサポートするためには、TLS証明書をクラスタ内に格納するだけでよい.
CNAMEレコードを返し、サービスをexternalNameフィールドにマッピングします.
サービスはいつpodでリクエストを転送できますか?podがまだ完全に動作していない限り、リクエストを転送することはできません.これを防止する概念は
すなわち、コンテナがリクエストを処理する準備ができているかどうか、またはリクエストのエンドポイントを処理し続けることができるかどうかがわかります.レディプローブは、アクティブプローブと同様にTCP、HTTP、スクリプトEXECをサポートします.
準備プローブに失敗すると、podのリストがサービスから削除され、リクエストの転送が回避されます.
このサービスの代わりにPodのIPアドレスを使用することが考えられるが、この方法は、動作段階において非常に非効率であり、管理されない.
ほとんどのサービス呼び出しと同じクライアントは、単一のエンドポイントを呼び出す必要があります.
このサービスオブジェクトは、外部に露出したIPに割り当てられ、このIP送信要求によって同じサービスによって管理されるPodに要求が割り当てられる.
(サービス管理の意味はlabelセレクタに指定されたpodです.)
サービスメンテナンス中に作成されたIPアドレスは変更されません.
apiVersion: v1
kind: Service
metadata:
name: kubia
spec:
ports:
- port: 80 -- service가 사용할 port
targetPort: 8080 -- service가 request를 forward할 pod의 port
selector:
app: kubia
sessionAffinity特定のクライアントのすべてのリクエストを同じpodに転送するためのプロパティ.
sessionAffinity: ClusterIP
として指定されると、同じクライアントのリクエストが同じpodに渡されます.クライアントがどのように負荷を分散しても、
sessionAffinity: None
プロパティを使用する必要があります.session Affinityのプロパティから、クッキーに基づいてルーティングできるかどうかはわかりますが、サービスオブジェクトはHTTPレベルで実行されるオブジェクトではないため、クッキーはサポートされていません.実際のサービスは、TCP、UDPのパケットのみを転送し、負荷、ファーストクラスに関心を持たない.
サービスはどのようにPodのIPアドレスを知っていますか?
サービスのIPは変更されませんが、PodのIPアドレスはいつでも変更される可能性があります.
では、サービスはどのようにして要求を送信するPodのIPアドレスを確定しますか?
Podが実行されると、kubernetesは環境変数を初期化し、この時点で存在する各サービスを示す.
サービスは、この環境変数を参照してpodのIPを取得します.
DNS
kubernetesのDNSサービスを実行すると、クラスタ内で実行されるすべてのpodがDNSサーバを自動的に有効にします.
podでDNSサービスを使用する場合、まずkubernetes内部DNSを使用するので、クラスタ内部でもDNSを使用することができる.
FQDN
クラスタ内で使用可能なDNS.
ドメインのパターンは
<serviceName>.<namespace>.svc.cluster.local
の形式である.svc.cluster.local
はcluterローカルサービスの接尾辞です.サービスを外部に露出
サービスオブジェクトとEndpointオブジェクトを構成することで、外部からアクセスできるエンドポイントを作成できます.
apiVersion: v1
kind: Endpoints
metadata:
name: external-service -- service의 이름과 동일해야한다.
subsets:
- addresses:
- ip: 11.11.11.11 -- 서비스에 연결될 IP의 항목
- ip: 22.22.22.22 -- 서비스에 연결될 IP의 항목
ports:
- port: 80
エンドポイントオブジェクトを構成すると、外部で共通IPにドメインを設定し、kubernetes接続を使用できます.サービスがIPアドレスではなくFQDNを使用する場合、クラスタのDNSを使用してマッピングすることができる.
spec:
type: ExternalName
externalName: <FQDN>
ports:
- port: 80
ServiceType
外部からアクセス可能なサービスを構成する方法は3つあります.
ClusterIP
クラスタ-内部IPにサービスを暴露し、cluter内部からのアクセスのみを許可します.
NodePort
各ノードからポートを開き、そのポートに送信されたリクエストを各サービスに送信する方法.
LoadBalancer
クラウド環境で使用する方法により、クラウドが提供するloadイコライザをサービスとしてアクセスできます.このとき、NodePortと同様に、LoadBarangerからのリクエストがノードのPortに送信される.クラウド環境で提供されるKubernetes(EKS,AKS)は、サービスオブジェクトの作成時にloadイコライザを自動的に作成してマッピングします.
Ingress
HTTPレベルでの動作対象.Ingressの重要な点は、1つのパブリックIPだけですべてのリクエストを受信して転送できることです.loadイコライザを使用する場合は、各エンドポイントに共通IPを割り当てる必要があります.リクエストをどのサービスに転送するかを判断するためにhostとpathを解析する共通IPが割り当てられる.このインポートがHTTPSをサポートするためには、TLS証明書をクラスタ内に格納するだけでよい.
ExternalName
CNAMEレコードを返し、サービスをexternalNameフィールドにマッピングします.
readiness probe
サービスはいつpodでリクエストを転送できますか?podがまだ完全に動作していない限り、リクエストを転送することはできません.これを防止する概念は
readiness probe
である.すなわち、コンテナがリクエストを処理する準備ができているかどうか、またはリクエストのエンドポイントを処理し続けることができるかどうかがわかります.レディプローブは、アクティブプローブと同様にTCP、HTTP、スクリプトEXECをサポートします.
準備プローブに失敗すると、podのリストがサービスから削除され、リクエストの転送が回避されます.
Reference
この問題について(Service), 我々は、より多くの情報をここで見つけました https://velog.io/@sumusb/Serviceテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol