3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

IstioのService Entry

Posted at

Service Entry とは(Istioのサイトより

  • ServiceEntryは、Istioの内部サービスレジストリに追加のエントリを追加し、メッシュ内の自動検出サービスがこれらの手動で指定したサービスにアクセス/ルーティングできるようにします。
  • ServiceEntryは、サービスのプロパティ(DNS名、VIP、ポート、プロトコル、エンドポイント)を記述します。
  • これらのサービスは、メッシュの外部サービス(例:Web API)、またはプラットフォームのサービスレジストリの一部ではないメッシュ内部サービス(例:Kubernetesのサービスと対話するVMのセット)である可能性があります。
  • さらに、ServiceEntryのエンドポイントは、workloadSelectorフィールドを使用して動的に選択することもできます。
  • これらのエンドポイントは、WorkloadEntryオブジェクトを使用して宣言されたVMワークロードまたはKubernetesポッドにすることができます。
  • 1つのサービスでポッドとVMの両方を選択できるため、サービスに関連する既存のDNS名を変更することなく、VMからKubernetesへのサービスの移行が可能になります。

やりたいこと

2つある。

  1. クラスタ外のサービスをサービスメッシュの外部サービスとして識別させて、Kialiで表示させたい
  2. クラスタ外の名前解決ができない自前のサーバをサービスメッシュの外部サービスとして識別させて、アクセスしたい
  3. サーバの自己証明書の検証をスキップさせたい or 真面目に検証したい

クラスタ外のサービスをサービスメッシュの外部サービスとして識別させる

YAMLをつくる。

  • 外部サービスの宛先は、dropbox、google、facebookとする
  • サービスメッシュの外部サービスとして識別させる
  • リスナーは443;TLSでスキーマはhttps
  • 名前解決はDNSでやる
extapi-se.yaml
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: external-svc-https
spec:
  hosts:
  - api.dropboxapi.com
  - www.googleapis.com
  - api.facebook.com
  location: MESH_EXTERNAL
  ports:
  - number: 443
    name: https
    protocol: TLS
  resolution: DNS

リソースをつくる

oc apply -f ./extapi-se.yaml

bookinfoサンプルアプリのratingsのPodに侵入して、リクエストを撃ちまくる

while true; do curl -k https://api.facebook.com; sleep 1; done

Kialiを見る。ちゃんとratingsのPodからexternal-svc-httpsへの経路が表示されている。

image.png

クラスタ外の名前解決ができない自前のサーバをサービスメッシュの外部サービスとして識別させて、アクセスしたい

Serviceをつくって、applyする。

apiVersion: v1
kind: Service
metadata:
  name: external-myapi
spec:
  clusterIP: None
  ports:
  - protocol: TCP
    port: 443

Endpointsをつくって、applyする。
192.168.50.231は自前のサーバのIPアドレス。

apiVersion: v1
kind: Endpoints
metadata:
  name: external-myapi
subsets:
  - addresses:
    - ip: 192.168.50.231
    ports:
    - port: 443

ServiceEntryをつくって、applyする。

  • hostsにはServiceのhostnameをいれる(Endpointsに通じる)
  • Istio側での名前解決はNone
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: external-se-myapi
spec:
  hosts:
  - external-myapi.default.svc.cluster.local
  ports:
  - number: 443
    name: https
    protocol: TLS
  location: MESH_EXTERNAL
  resolution: NONE

bookinfoサンプルアプリのratingsのPodに侵入して、リクエストを撃つ。
うまくいった。

$ curl -k https://external-myapi.default.svc.cluster.local
Example web content

-k(証明書検証を無視)を外すとエラーになる。

$ curl https://external-myapi.default.svc.cluster.local
curl: (77) error setting certificate verify locations:
  CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs

サーバの自己証明書の検証をスキップさせたい or 真面目に検証したい

TODO

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?