Kubernetes Object: Service


パードには次の問題があります.
  • ポンドが生成されるたびに、まぶたが変わります.ノード上でパイドをスケジューリングし,パイドを生成すると,IPが決定され,クライアントはサーバパイドIPを事前に知ることができない.
  • は、アクセスする必要があるサーバに対応する1つ以上のシードを持たない場合もあります.コネチカットにはscaloutという友達がいます.この場合、1つのサービスにアクセスする場合は、残りの部分で負荷バランスをとる必要があります.
  • この問題を解決するために使用される機能は서비스である.

    サービス


    クバーネディスサービスは、同じサービスを提供するシードグループに持続的な単一接触点を作成しようとしたときに生成されるリソースである.
    各サービスには、サービスが存在する場合に絶対に変更されないIPアドレスとポートがあります.
    サービスを作成する方法は2つあります.

    サービスの作成方法


    1.kubectl exposeの使用


    https://kubernetes.io/ko/docs/tutorials/stateless-application/expose-external-ip-address/
    kubectl expose deployment hello-world --type=LoadBalancer --name=my-service

    2.yamlディスクレバーを使用したサービスの作成

  • ラベルセレクタに一致するパードの8080ポートに移動します.
  • kube-svc.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: kubia
    spec:
      ports:
      - port: 80
        targetPort: 8080
      selector:
        app: kubia
    
    kubectl apply -f kube-svc.yaml

    このサービスを作成すると、Cluster IPがサービスに割り当てられていることがわかります.Cluster IPは、クバーネディス内部でしかアクセスできないIPである.
    実行中のコンテナで通信をリモートでテストするには、シードを解放します.
    kube-pods.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: kubia
      labels:
        app: kubia
    spec:
      containers:
      - image: luksa/kubia
        name: kubia
    kubectl execで通信をテストする

    以上のコマンドを図に示します.すなわち,kubiaというpardに10.98.167.164の内部クラスタIpiでアクセスし,サービスは負荷バランスをとり,pardに近づける.

    サービスの使用


    sessionAffinity: ClientIP


    このようにして、サービスは接続を任意の帯域に伝達し、サービスエージェントは任意の帯域を選択して伝送し、上記の3つの帯域のいずれかを知らない.
    特定のクライアントのすべてのリクエストを毎回同じパラメータにリダイレクトする場合は、sessionAffinityオプションを使用します.
    apiVersion: v1
    kind : Service
    spec:
      sessionAffinity : ClientIP
    

    複数ポートへの露出

    apiVersion: v1
    kind: Service
    metadata:
      name: kubia
    spec:
      ports:
      - name: http
        port: 80
        targetPort: 8080
      - name: https:
        port: 443
        targetPort: 8443
      selector:
        app: kubia
    

    サービス名のポートを参照してください

    apiVersion: v1
    kind: Service
    spec: 
      ports:
      - name: http
        port: 80
        targetPort: http
      - name: https
        port: 443
        targetPort: https

    検索サービス


    顧客グループはどのようにサービスIPとサービスポートを知っていますか?
    クベルネディスは、クライアント・パイドがサービスIPとポートを検索する機能を提供します.
    主に,環境変数探索,dns探索,FQDNの3つの手法を用いる.
  • クーベルネディスパード環境変数
  • を表示
    kubectl exec {pod} env

    サービスを外部に露出


    これまで,サービスがクラスタ内で通信する方法を理解してきた.しかし、私たちがよく知っているページ画面は外部からアクセスする必要があります.では、クバーネディス国内でサービスを外部に暴露するにはどうすればいいのでしょうか.
    方法は3つあります
    1)NodePort:各クラスタノードは、ノード自体からポートを開き、そのポートを受信したトラフィックをサービスに渡します.
    2)LoadBalaner:クラウドインフラストラクチャの構成済みロードバランササービスへのアクセス
    3)Ingress:単一IPで複数のサービスを暴露するIngressリソースを作成する
    あります.それぞれの方法を理解してみましょう.

    NodePort


    サービスyamlファイルをTypeのNodePortとして30000-32767ポートを指定します.