2025年3月23日日曜日

istio ingress gateway(指定したEnvoyプロキシが接続しているクラスターの情報表示)

指定した Envoy プロキシが接続しているクラスターの情報を表示しています。
出力からは、Envoy プロキシがどのサービスに対して接続設定を持っているか
またはどのサービスとの通信が行われているかを確認できます。

[出力の説明]
SERVICE FQDN
接続先サービスのFQDN(完全修飾ドメイン名)。

PORT
接続先サービスがリッスンしているポート番号。

SUBSET
サービスのサブセット(指定されている場合)。

DIRECTION
通信の方向
  - outbound は、プロキシが外向きに送信するトラフィック
  - inbound はプロキシが受信するトラフィック

TYPE
クラスターのタイプ
EDS (Endpoint Discovery Service)
  • 意味: EDSは、サービスのエンドポイント情報を動的に管理するためのサービスです。EDSタイプのクラスターは、サービスメッシュ内のエンドポイントが動的に変化する場合に使用されます。

  • 用途: 通常、Istio や Envoy が管理するクラスターは、エンドポイントのリストが動的に変更されるため、エンドポイントディスカバリ(エンドポイントの追加や削除)が必要です。例えば、Pod がスケールイン・スケールアウトされる場合、EDS クラスターはそれに合わせてエンドポイントのリストを更新します。

STATIC

  • 意味STATICタイプは、静的に設定されたクラスターです。通常、固定のIPアドレスやホスト名に基づいたエンドポイントを指し、動的なエンドポイント変更はありません。

  • 用途: 静的なサービス(例えば、外部のサービスや一部の特定のリソース)への接続を指定する際に使用されます。例えば、Prometheus やログ収集用の静的な接続などがこれに該当します。





以下、コマンドを投入してみる。
istioctl proxy-config clusters istio-ingressgateway-587f957f4f-p8hhj -n istio-system


Istioの診断ツール( istioctl proxy-status)

 Envoyの状態を簡単に確認するためのコマンドです。このコマンドで、Envoyがクライアントとサーバー間の通信を適切に処理しているかを確認できます

このコマンドは、各Envoyプロキシがどのように接続されているかを示すステータス情報を提供します。例えば、SYNCED 状態でない場合は、Envoyプロキシが最新の設定を取得していない可能性があります。



以下のコマンドを投入
istioctl proxy-status











istio ingress gateway(envoyアクセスログを出力してみる)

istio ingress gateway経由で、該当のPod(nginx)にアクセスが出来ているのか
把握したいので、istio ingress gateway(Envoy)に対して、出力されるログの設定を行ってみる

1)EnvoyFilterのマニフェストを作成して、デプロイを実施する
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: ingressgateway-access-log
namespace: istio-system
spec:
configPatches:
- applyTo: NETWORK_FILTER
match:
listener:
filterChain:
filter:
name: envoy.filters.network.http_connection_manager
patch:
operation: MERGE
value:
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
access_log:
- name: envoy.access_loggers.stdout
typed_config:
"@type": type.googleapis.com/envoy.extensions.access_loggers.stream.v3.StdoutAccessLog
log_format:
json_format:
START_TIME: "%START_TIME%"
METHOD: "%REQ(:METHOD)%"
PATH: "%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%"
PROTOCOL: "%PROTOCOL%"
RESPONSE_CODE: "%RESPONSE_CODE%"
BYTES_RECEIVED: "%BYTES_RECEIVED%"
BYTES_SENT: "%BYTES_SENT%"
USER_AGENT: "%REQ(USER-AGENT)%"
UPSTREAM_HOST: "%UPSTREAM_HOST%"
UPSTREAM_CLUSTER: "%UPSTREAM_CLUSTER%"
DOWNSTREAM_LOCAL_ADDRESS: "%DOWNSTREAM_LOCAL_ADDRESS%"
DOWNSTREAM_REMOTE_ADDRESS: "%DOWNSTREAM_REMOTE_ADDRESS%"
workloadSelector:
labels:
app: istio-ingressgateway


2)istio ingress gateway(Envoy)にログインして、curlコマンドを実施
例:10.106.197.8は、istio ingress gatewayのLBのアドレスになる














3)istio ingress gateway(Envoy)のログを確認してみる
kubectl -n istio-system logs -l app=istio-ingressgateway -c istio-proxy











2025年3月16日日曜日

isito ingress gateway(Helm編)

参照先:



CRDのインストールが失敗した場合用:

curl -L https://istio.io/downloadIstio | sh -

cd istio-1.25.0

export PATH=$PWD/bin:$PATH

istioctl install --set profile=default -y



CRD&istio base:
helm install istio-base istio/base -n istio-system --set defaultRevision=default --create-namespace




istiod:
helm install istiod istio/istiod -n istio-system --wait




ingressgateway:(内部用):

helm install istio-ingressgateway istio/gateway -n istio-system --wait






egressgateway:(外部用):

helm install istio-egressgateway istio/gateway -n istio-system --set gateways.istio-egressgateway.enabled=true



2025年3月15日土曜日

istio ingress gateway install(再)


以下、導入手順:
curl -L https://istio.io/downloadIstio | sh -
cd istio-1.25.0
export PATH=$PWD/bin:$PATH
istioctl install -set profile=default


ingress gatewayが入っていることを確認:







selecortのapp=istio-ingressgatewayまたは
istio=ingressgatewayを以下の
spec.selector:に記載すること
(今回は、app=istio-ingressgatewayにする





ingress gatewayのマニフェストを作成:
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: nginx-gateway
namespace: default
spec:
selector:
app: istio-ingressgateway # Istio Ingress Gateway のデフォルトラベル
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: nginx-vs
namespace: default
spec:
hosts:
- "*"
gateways:
- nginx-gateway
http:
- match:
- uri:
prefix: / # nginx.default.svc.cluster.local<----完全修飾サービス名にするアクセスできず。
route:
- destination:
host: nginx
port:
number: 80
---
# nginx Deployment と Service の作成
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
resources:
limits:
memory: "512Mi" # コンテナが使用できる最大メモリ
cpu: "500m" # コンテナが使用できる最大CPU
requests:
memory: "256Mi" # コンテナに最低限必要なメモリ
cpu: "250m" # コンテナに最低限必要なCPU
---
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: default
spec:
ports:
- port: 80
targetPort: 80
selector:
app: nginx

istio gatewayの確認コマンド

以下のコマンドになる。(kubectl get gateway -Aではないからね)
kubectl get gateway.networking.istio.io -A


2025年2月23日日曜日

デバッグログを表示させるのは?(k8s)

以下のオプションでデバッグログが見れる 

kubectl -v=9 get pod -n redis



k8s便利アイテム

[コマンドでログをぱっと見たい時に便利] 

インストール方法:

brew install stern

使い方:
stern [pod名]

[namespaceを簡単に切り替えられるコマンド] 
インストール方法:
brew install kubens
使い方:
kubens [namespaceを記載]


[contextを簡単に切り替えられるコマンド]
インストール方法:
brew install kubectx
使い方:
kubectxと入力して、該当のcontextを選択

kubectlと入力するのが省略したい時に便利
alias k='kubectl'





ArgoCD(multi build)

nginx2つ作成してリポジトリにpushします


 











GitHubでArgoCD用のトークンを発行します。

   ->今回は、classicで作成しました。

















ArgoCDにログインします。

Settings > Repositoriesを選択

























Choose your connection method: VIA HTTPSを選択

Type: gitを選択

Name: 名前を記載(なんでも良いです)

Project: default(適当に選択出来た物を選んだ)

Repository URL: Githubのリポジトリを記載

UserName:   githubのユーザ名

Password:    上記、githubで発行したトークンを記載


上記、記載ができたらCONNECTを押す















ApplicationからNEW APPを押す











Application Name : 分かりやすい名前に

Proiect Namel:選択出来た物を選びました。

SYNC POLICY: Automatic

         ->PRUNE RESORCES

Repository URL: 先ほどのgithubのリポジトリを選択

Revision:HEAD

Path: .  


Cluster URL: 選択出来た物を選ぶ

Namespace:  デプロイ先のNamespaceを記載


DIRECTORY RECURSE: チェックを入れる(入れないと、デプロイ出来ませんでした)


上記、記載ができたらCREATEを押す
































実際にデプロイすると、以下のようになります。






ArgoCD側の様子:








istio ingress gateway(指定したEnvoyプロキシが接続しているクラスターの情報表示)

指定した Envoy プロキシが接続しているクラスターの情報を表示しています。 出力からは、Envoy プロキシがどのサービスに対して接続設定を持っているか またはどのサービスとの通信が行われているかを確認できます。 [出力の説明] SERVICE FQDN :  接続先サービス...