公式サイトリンクhttps://kubernetes.io/zh/docs/concepts/services-networking/service/
サービスは、Webサービスとして公開グループ経営のポッド上の抽象メソッドのアプリケーションで
サービスする必要があり、なぜ
、PODはノンストップ破壊を持っていますフィーチャーの作成、およびそれぞれのIPは常に変化していること、自身の割り当てられたIPポッド、創造のポッド、破壊手段を持って、どのようにフロントエンドのIPアドレスを追跡することは非常に困難となり、サービスは、この問題を解決することです。この監視ポッドの変化をもたらす、と固定エントランス(玄関負荷分散)への外部アクセスを提供することができます。
エンドポイント
エンドポイントを、我々はサービスの背後に関連ポッドを知ることができ、エンドポイントは、ポッドの変化に伴って変化します。関連するラベルによるサービスとポッド。
kubectl GETエンドポイント#ビューエンドポイント
サービスの意義
ポッドを防ぐためには、に失われた
アクセスポリシーポッドのセットを定義(ロード・バランシングを、デフォルトではポーリングである)
CLUSTERIP、NodePort、ロードバランサの3種類のサポート
公式サイトのリンクhttps://kubernetes.io/zh/をドキュメント/チュートリアル/サービス/ IP-ソース/#型E7 CLUSTERIP - %%% B1%BB%9E%8B E5-E7サービス- %84 %% 9A-ソース-IP。
ClusetrIp:クラスタ缶アクセス内のデフォルトの割り当て仮想IP(VIP)
NodePortは:(IPネットワークは、SLBのロードバランシングを結合IPノードを使用して、各外部ノードによってアクセス可能な)ランダム化されない、各ノードの外部アクセスエントリ、固定された推奨ポートとしてポートを割り当てます。
ロードバランサ:特定のクラウド・プロバイダーの作業。たとえば、Googleのクラウドの場合、AWSは、OpenStackの(SLBは、私たち自身の内部のノード構成のサーバーを持っていない、アクセス、独自の負荷分散)
実装メインサービスとモード2つのネットワークを基礎となるiptablesのIPVS
Service Agentは
kubernetesクラスタ内の各ノードはKUBE-プロキシプロセスを実行します。KUBE-プロキシサービスは、VIP(仮想IP)形式の実現のために責任があります。
プロキシモードは/opt/kubernetes/cfg/kube-proxy.conf #nodeのCAT上に設けられている
ユーザ空間のプロキシモード
iptablesのプロキシモード
尊敬のユーザ空間モードでは、他には自動的にポッド再試行が割り当てられ、割り当てられたリンクに障害が発生した最初のポッドを検出した後モードをiptablesの。
iptableは多くのルール(更新、非増分)を作成し
、上から下へ一つずつのiptable一致します(大きな遅延)
-L#表示ルールはiptablesの
プロキシモードをIPVS
iptablesの相対モード、ユーザー指向のインタフェースは、iptablesのは、高効率に直接IPVSカーネルモードを平準化され、KUBE-プロキシリダイレクトトラフィックの遅延が短い、同期プロキシは、より良い性能を支配する、
ipvsadmのIPVSはを参照してください。ルール#-ln
service.yaml
kubectl expose deployment nginx --type=NodePort --port=80 --target-port=80 --name=nginx-service -o yaml --dry-run #生成yaml
apiVersion: v1 #service api版本
kind: Service #设置为service
metadata: #元数据
creationTimestamp: null
labels:
run: nginx #标签
name: nginx-service #service名称
spec:
ports:
- port: 80 #service端口,用于集群内部访问的端口
protocol: TCP #协议tcp、udp
targetPort: 80 #容器内部应用的端口,例如ngin默认端口是8080
nodePort=30001 #设置nodeport端口,限定在30000-50000之间
selector:
run: nginx #关联的标签
type: NodePort #ClusterIP、NodePort、LoadBalancer三种类型
status:
loadBalancer: {}
マルチポートサービス
マルチポートを使用して、あなたはそれらを明確にするためにすべてのポートの名前を提供する必要があります。
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- name: http #端口name1
protocol: TCP
port: 80
targetPort: 9376
- name: https #端口name2
protocol: TCP
port: 443
targetPort: 9377
内部DNSクラスタサービス
コアDNSは、内部kubernetesデフォルトのDNSサービスです。
DNSを使用して、busyboxの試験は、同じネームスペースを使用できることが想定されていない後svc.cluster.local缶充填しません。