Kubernetesの侵入で外部リソースを公開する
5894 ワード
他の夜、私は私のhomelabの周りを徘徊し、私は正しく私の新しいホームアシスタントのインスタンスをインターネットに公開しなかったことに気づいた.数ヶ月前、家のアシスタント(今のHA)は、その新しい恒久的な家を発見した.我々はロックダウンしているので、私は私のローカルネットワークの外にHAに到達する必要はありませんでした.
私はまだ家から働いています.どの方法がそれを露出するのがベストだったかを選択している間、私はアイデアを持っていました、なぜ私のKubernetesクラスタで侵入を使用しない?
それは少し奇妙に思えるかもしれないが、私の声:私は既にKaybernetesクラスタを持っており、cert-managerが構成され、 に取り組んでいます私はクラスタにいくつかのサービスを移動する予定です、そして、彼らはどうしてもHAに達する必要があります 私はKubernetesについて私ができるだけ多くを学びたいです、そして、これは良い機会242479182のようでした
それで、私のゴールを達成するために、私は1つのことを必要とします:どのように、私は外部リソースにKubernetesサービスを指し示すことができますか?
待って、なぜサービス?あなたは、侵入を前に言及しませんでした?はい、あなたは正しいが、私と一緒に耐える.
Kubernetesでは、侵入者は受信したすべてのリクエストをリダイレクトするサービスを必要とします.したがって、適切にHAをイングルで公開するには、それを指すサービスを作成する必要があります.
通常、サービスは、セットのポップスを露出するのに用いられます;このように、異なったアプリケーションが互いに話をする必要があるならば、彼らは彼らのpod名前(いろいろに変わることができました)を使用する必要はありません、しかし、彼らはサービス名を使用することができます.
サービスを作成するとき、別のリソースが自動的に作成されます.このエンドポイントは、サービスセレクタ仕様で指定したセレクタにマッチするPODの参照(すべてのIPアドレス)を含みます.
この方法で作成したエンドポイントは、作成したサービスと同じ名前になります.
しかし、ここでは、我々はセレクタなしでサービスを作成することができますし、我々はそれを行う場合、我々はまた、自分自身をエンドポイントを作成する必要があります、このエンドポイントはKubernetesクラスタの外のIPを指す可能性があります.
それで、我々がKubernetes侵入を使ってHAを露出させるために我々が作成する必要があるYAMLを見ましょう.
エンドポイント.気象研
インドレス気象研
そして、私は私が私のK 8 Sクラスタの中でHAを使用する若干のサービスを動かしたいとあなたに話したのを思い出してください?今、私がしなければならないすべては、それらを展開して、IPアドレスを使用するのではなく、HAのためのURLとしてホームアシスタントを使用することです.
完了のために、すでにあなたのHAインスタンスのためにローカルドメインがあるならば、あなたはエンドポイントの作成をスキップして、直接Service's
私はまだ家から働いています.どの方法がそれを露出するのがベストだったかを選択している間、私はアイデアを持っていました、なぜ私のKubernetesクラスタで侵入を使用しない?
それは少し奇妙に思えるかもしれないが、私の声:
それで、私のゴールを達成するために、私は1つのことを必要とします:どのように、私は外部リソースにKubernetesサービスを指し示すことができますか?
待って、なぜサービス?あなたは、侵入を前に言及しませんでした?はい、あなたは正しいが、私と一緒に耐える.
Kubernetesでは、侵入者は受信したすべてのリクエストをリダイレクトするサービスを必要とします.したがって、適切にHAをイングルで公開するには、それを指すサービスを作成する必要があります.
通常、サービスは、セットのポップスを露出するのに用いられます;このように、異なったアプリケーションが互いに話をする必要があるならば、彼らは彼らのpod名前(いろいろに変わることができました)を使用する必要はありません、しかし、彼らはサービス名を使用することができます.
サービスを作成するとき、別のリソースが自動的に作成されます.このエンドポイントは、サービスセレクタ仕様で指定したセレクタにマッチするPODの参照(すべてのIPアドレス)を含みます.
この方法で作成したエンドポイントは、作成したサービスと同じ名前になります.
しかし、ここでは、我々はセレクタなしでサービスを作成することができますし、我々はそれを行う場合、我々はまた、自分自身をエンドポイントを作成する必要があります、このエンドポイントはKubernetesクラスタの外のIPを指す可能性があります.
それで、我々がKubernetes侵入を使ってHAを露出させるために我々が作成する必要があるYAMLを見ましょう.
エンドポイント.気象研
apiVersion: v1
kind: Endpoints
metadata:
name: home-assistant
subsets:
- addresses:
- ip: 1.1.1.1 # Insert your home-assistant IP here
ports:
- name: ha
port: 8123
protocol: TCP
サービス気象研apiVersion: v1
kind: Service
metadata:
name: home-assistant
spec:
ports:
- name: ha
port: 80
protocol: TCP
targetPort: 8123
type: ClusterIP
clusterIP: None
注意: clusterIP
プロパティをNone
に設定します.これはKubernetesにこのサービスにIPを提供しないように指示します我々はそれを必要としない.このようなサービスもヘッドレスサービスとして知られています.インドレス気象研
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: "letsencrypt-prod"
name: home-assistant
spec:
rules:
- host: ha.awesome-domain.com # insert your domain here
http:
paths:
- backend:
serviceName: home-assistant
servicePort: ha
path: /
tls:
- hosts:
- ha.awesome-domain.com # insert your domain here
secretName: home-assistant-tls
現在、CERTマネージャーがその仕事を終えた後に、これらの3つのファイルのためにkubectl apply -f ...
を走らせるならば、我々はKubernetesの外で我々のホームアシスタントインスタンスを指す有効な証明書でドメインで終わります.そして、私は私が私のK 8 Sクラスタの中でHAを使用する若干のサービスを動かしたいとあなたに話したのを思い出してください?今、私がしなければならないすべては、それらを展開して、IPアドレスを使用するのではなく、HAのためのURLとしてホームアシスタントを使用することです.
完了のために、すでにあなたのHAインスタンスのためにローカルドメインがあるならば、あなたはエンドポイントの作成をスキップして、直接Service's
externalName
propertyを使うことができます.Reference
この問題について(Kubernetesの侵入で外部リソースを公開する), 我々は、より多くの情報をここで見つけました https://dev.to/oen/expose-an-external-resource-with-a-kubernetes-ingress-omテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol