Kubernrtesサービスタイプ(サービスタイプ)の分析
スコフィールド初心者の運用と保守の話
最初の写真
Kubernetesクラスターでは、サービスはラベルセレクターを介して対応するポッドを選択し、リクエストを転送します。アニメーションを見ると、付箋セレクターを直接体験できます。
ポッド、エンドポイント、およびサービス間の関係
1.たとえば、
最初にデプロイメントファイルを見て、主にコメント部分を見てみましょう。ファイルが長すぎるため、この記事ではyamlファイルの一部のフィールドが削除されています
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: gogs
labels: # 定义StatefulSet的标签,为后面Service选择器提供标签
app: gogs
spec:
serviceName: gogs
replicas: 1
selector:
matchLabels: # 标签选择器,StatefulSet通过该标签选择pod
app: gogs
template:
metadata:
labels: # 定义pod的标签
app: gogs
spec:
terminationGracePeriodSeconds: 180
.......
---
apiVersion: v1
kind: Service
metadata:
name: gogs
labels:
app: gogs
spec:
type: NodePort
ports:
- port: 3000
targetPort: 3000
selector: # 标签匹配器,Service通过该标签匹配到对应的Pod
app: gogs
2.実行結果を表示します
[root@k8s-node001 ~]# kubectl get po,ep,svc
NAME READY STATUS RESTARTS AGE
pod/gogs-0 1/1 Running 0 3d1h
NAME ENDPOINTS AGE
endpoints/gogs 100.68.150.197:3000 3d1h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/gogs NodePort 10.106.102.74 <none> 3000:30526/TCP 3d1h
3. kubectl describeを使用して、ポッド、エンドポイント、サービスの詳細を表示します
4.上の図から、関連情報を確認できます
。1。ポッドとエンドポイントのIPは同じです。エンドポイントは、外部にサービスを提供できるポッドをマッピングするために使用されます。ポッドの実行ステータスが実行されていない場合は、エンドポイント
2は生成されません
。StatefulSetとポッドの関係はラベルセレクター3を介して関連付けられます。サービスはKubernetesに組み込まれたLoadBalancerとして簡単に理解でき、その役割は複数のポッドに負荷分散を提供することです。
4.サービスはラベルアプリを使用します:負荷分散に必要なポッドに一致するゴグ
さて、ポッド、エンドポイント、サービスの関係について簡単に紹介します。次に、Kubernetesのいくつかのサービスタイプを紹介しましょう。
ClusterIP
内部クラスターIPサービスによって公開されるServiceType、値を選択します。サービスにはクラスター内でのみアクセスできます。これがデフォルトの
欠点です。サービスにはクラスター
栗内でのみアクセスできます。
apiVersion: v1
kind: Service
metadata:
name: gogs-clusterip
spec:
type: ClusterIP
ports:
- port: 3000
targetPort: 3000
selector:
app: gogs
結果
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
gogs-clusterip ClusterIP 10.104.1.9 <none> 3000/TCP 2m11s
10.104.1.9はクラスター内のIPであり、クラスター外ではアクセスできないことがわかります。
NodePort
タイプフィールドがNodePortに設定されている場合、Kubernetesは指定された範囲(デフォルト:30000〜32767)でポートを割り当てます。各ノードは、ランダムに割り当てられたポートをサービスにプロキシします。
栗を持ち上げる
apiVersion: v1
kind: Service
metadata:
name: gogs
spec:
type: NodePort
ports:
- port: 3000
targetPort: 3000
selector:
app: gogs
結果
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
gogs NodePort 10.106.102.74 <none> 3000:30526/TCP 3d2h
ここに表示されているように、ポート30526はランダムに割り当てられ、クラスター内の任意のノードのIP +30526を介してサービスにアクセスできるようになりました。
イングレス
Ingressは、クラスターの外部からクラスター内のサービスへのHTTPおよびHTTPSルートを公開します。トラフィックルーティングは、Ingressリソースで定義されたルールによって制御されます。
入力は、外部からアクセス可能なURLを提供し、トラフィックの負荷を分散し、SSL / TLSを終了し、名前ベースの仮想ホスティング機能を提供するサービスとして構成できます。Ingressコントローラーは通常、ロードバランサーを介してIngressを実装する役割を果たしますが、トラフィックの処理を支援するためにエッジルーターやその他のフロントエンドを使用して構成することもできます。
栗
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: gogs-gogs
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: gogs.test.cn
http:
paths:
- path: /
backend:
serviceName: gogs
servicePort: 3000
結果
NAME CLASS HOSTS ADDRESS PORTS AGE
gogs-gogs <none> gogs.test.cn 10.26.25.21 80 3d19h
これで、ドメイン名gogs.test.cnを介してgogsにアクセスできます
。gogs.test.cnは、入力が配置されているマシンのIPにDNS解決を追加する必要があることに注意してください。
LoadBalancer
サービスを作成するときに、クラウドネットワークロードバランサーを自動的に作成することを選択できます。これにより、外部からアクセス可能なIPアドレスが提供され、クラスターノードの正しいポートにトラフィックを分散できます。LoadBalancerは通常、パブリッククラウドベンダーによって提供され、ここで説明するように、単独で構築する必要はありません。
PS:フォローアップ記事はdev.kubeops.netに同期されます
注:記事の写真はインターネットからのものです。侵害がある場合は、時間内に削除するために私に連絡してください。