Knative サービスのデフォルトドメイン名は {route}.{namespace}.{default-example.com} の形式です。{default-example.com} の部分はデフォルトのサフィックスで、通常は `example.com` です。より柔軟なルーティングのためにカスタムドメイン名を使用するには、このトピックの手順に従ってください。ACK Knative では、ConfigMap を使用してすべての Knative サービスのグローバルカスタムドメイン名を変更できます。また、DomainMapping を使用して、単一の Knative サービスにカスタムドメイン名を設定することもできます。
前提条件
Knative がクラスターにデプロイされていること。詳細については、「Knative のデプロイと管理」をご参照ください。
ドメイン名を登録済みであること。詳細については、「Alibaba Cloud DNS」をご参照ください。
グローバルカスタムドメイン名の設定
各サービスに個別にドメイン名を設定することなく、ACK Knative のすべての Knative サービスに同じドメイン名サフィックスを使用するには、次の手順に従います。
次のコマンドを実行して、
knative-serving名前空間にあるconfig-domainという名前の ConfigMap オブジェクトを編集します。kubectl edit cm config-domain --namespace knative-serving設定ファイルを変更します。
デフォルトドメイン名を
example.comからカスタムドメイン名に変更し、ファイルを保存します。この例では、カスタムドメイン名をmydomainに設定します。apiVersion: v1 kind: ConfigMap metadata: name: config-domain namespace: knative-serving data: mydomain.com: "" # example.com を mydomain.com に置き換えます。実際のサービスドメイン名を使用してください。次のコマンドを実行して、ドメイン名が有効になったかどうかを確認します。
# helloworld-go を Knative サービスの名前に置き換えます。 kubectl get route helloworld-go --output jsonpath="{.status.url}" | awk -F/ '{print $3}'予想される出力:
helloworld-go.default.mydomain.comこの出力は、カスタムドメイン名が有効になったことを示します。
DNS レコードを追加して、カスタムドメイン名を Knative ゲートウェイの IP アドレスにマッピングします。
次のコマンドを実行して、カスタムドメイン名を使用して Knative サービスにアクセスします。
curl http://helloworld-go.default.mydomain.com予想される出力:
Hello Knative!この出力は、カスタムドメイン名が設定され、Knative サービスがリクエストに正常に応答したことを示します。
単一サービス用のカスタムドメイン名の設定
Knative サービスに特定のドメイン名を定義するには、次の手順に従います。
コンソール
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[Knative] ページで、[サービス] タブをクリックし、ターゲットサービスの名前をクリックします。
サービス詳細ページで、右上隅にある [アクセス設定] をクリックして、サービスのカスタムドメイン名を設定します。
kubectl
サービスに特定のドメイン名を定義し、柔軟なルーティングのために Ingress コントローラーを使用するには、DomainMapping を使用できます。
次のコマンドを実行して、
helloworld.knative.top.yamlファイルを作成します。vi helloworld.knative.top.yaml次の YAML コンテンツをファイルに追加します。その後、ファイルを保存して閉じます。
apiVersion: serving.knative.dev/v1beta1 kind: DomainMapping metadata: name: helloworld.knative.top.mydomain.com # サービスドメイン名を設定します。実際のサービスドメイン名を使用してください。 namespace: default # 名前空間をサービスが存在する名前空間に設定します。 spec: ref: name: helloworld-go # ターゲットサービスの名前。 kind: Service apiVersion: serving.knative.dev/v1次のコマンドを実行して、
helloworld.knative.top.yamlで定義されたリソースを Kubernetes クラスターに適用します。kubectl apply -f helloworld.knative.top.yaml予想される出力:
domainmapping.serving.knative.dev/helloworld.knative.top created次のコマンドを実行して DomainMapping を確認します。
kubectl get domainmapping helloworld.knative.top予想される出力:
NAME URL READY REASON helloworld.knative.top http://helloworld.knative.top Trueこの出力は、カスタムドメイン名が有効になったことを示します。
DNS レコードを追加して、カスタムドメイン名を Knative ゲートウェイの IP アドレスにマッピングします。
次のコマンドを実行して、カスタムドメイン名を使用して Knative サービスにアクセスします。
curl http://helloworld.knative.top.mydomain.com予想される出力:
Hello Knative!この出力は、カスタムドメイン名が設定され、Knative サービスがリクエストに正常に応答したことを示します。
単一サービス用のカスタムパスの設定
Knative サービスに特定のパスを定義するには、knative.aliyun.com/serving-ingress アノテーションを使用してカスタムドメイン名とパスを指定できます。たとえば、knative.aliyun.com/serving-ingress: cafe.mydomain.com/coffee は、cafe.mydomain.com ドメイン名と /coffee パスを指定します。
単一パスの例:
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: coffee-mydomain
annotations:
knative.aliyun.com/serving-ingress: cafe.mydomain.com/coffee
spec:
template:
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8複数パスの例:
複数のパスを区切るには、コンマ (,) を使用します。
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: coffee-mydomain
annotations:
knative.aliyun.com/serving-ingress: cafe.mydomain.com/coffee,cafe.mydomain.com/tea
spec:
template:
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8パスの再書き込み
Application Load Balancer (ALB) ゲートウェイはパスの再書き込みをサポートしています。Knative サービスのパスを書き換えるには、alb.ingress.kubernetes.io/rewrite-target: アノテーションを設定します。次のコードは例を示しています。
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: coffee-mydomain
annotations:
knative.aliyun.com/serving-ingress: cafe.mydomain.com/api/coffee
alb.ingress.kubernetes.io/rewrite-target: /coffee
spec:
template:
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8ワイルドカードドメイン名の設定
Knative サービスにワイルドカードドメイン名を定義するには、knative.aliyun.com/serving-ingress アノテーションの値を / に設定します。たとえば、knative.aliyun.com/serving-ingress: / はワイルドカードドメイン名を指定します。次のコードは例を示しています。
ALB ゲートウェイのみがサポートされています。
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: coffee-mydomain
annotations:
knative.aliyun.com/serving-ingress: "/"
spec:
template:
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8関連ドキュメント
カスタムドメイン名に HTTPS 証明書を設定する方法については、「HTTPS 証明書の設定」をご参照ください。
Knative に gRPC サービスをデプロイしてネットワーク効率を向上させる方法については、「Knative で gRPC サービスをデプロイする」をご参照ください。