名前空間をまたがるExternalNameサービスのサポート
名前空間は、Kubernetesクラスター内のリソースを分離するために使用されます。時には、異なる名前空間のサービスが、別の名前空間にあるサービスにアクセスする必要がある場合があります。そのようなシナリオでは、Kubernetesが提供する
ExternalNameサービスを使用できます。ExternalNameサービスは、セレクターを持たず、代わりにDNS名を使用する特別なサービスです。
サービス定義では、
externalNameフィールドは名前空間と、その名前空間でアクセスしようとしているサービスを指す必要があります。Citrix ingress controllerは、クラスター内のサービスにアクセスする必要がある場合に、ExternalNameタイプのサービスをサポートします。
ExternalNameサービスを作成する際には、以下の基準を満たす必要があります。
-
サービス定義の
externalNameフィールドは、以下の形式に従う必要があります。svc: <name-of-the-service>.<namespace-of-the-service>.svc.cluster.local -
ExternalNameサービス内のポート番号は、ターゲットとなるサービスのポート番号と完全に一致する必要があります。
注:
アプリケーションのサービスがKubernetesクラスターの外部にあり、
ExternalNameサービスを作成した場合、外部サービス向けトラフィック管理機能を使用してドメイン名を解決できます。
ExternalNameサービスの例
この例では、デフォルトの名前空間で
mysqlサービスが実行されており、namespace1名前空間からmysqlサービスにアクセスするために、サンプルExternalNameサービスが作成されます。
以下は、デフォルトの名前空間で実行されているMySQLサービスのサンプルサービス定義です。
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: default
spec:
clusterIP: None
ports:
- port: 3306
protocol: TCP
targetPort: 3306
selector:
app: mysql
type: ClusterIP
以下は、
namespace1名前空間からmysqlサービスにアクセスするためのサンプルExternalNameサービス定義です。
kind: Service
apiVersion: v1
metadata:
name: dbservice
namespace: namespace1
spec:
type: ExternalName
externalName: mysql.default.svc.cluster.local
ports:
- port: 3306
protocol: TCP
targetPort: 3306
この例では、サービスは
externalName: mysql.default.svc.cluster.localフィールドで指定されているように、mysqlがデプロイされている名前空間を指しています。ここで、mysqlはサービス名、defaultは名前空間です。ポート名もmysqlサービスと同じであることがわかります。