域名映射-CDC配置(ClusterDomainClaim)
#ClusterDomainClaim
◼ 域名映射依赖于ClusterDomainClaim,创建方法(二选一)
◆~$ kubectl patch configmap config-network -n knative-serving -p '{"data":{"autocreate-cluster-domain-claims":"true"}}’
⚫ 全局配置参数,允许自动创建CDC资源
◆手动创建相关的CDC资源,名称为要使用的外部映射域名
⚫ 基于ClusterDomainClaim资源规范创建,仅需要指定名称,且namespace要在spec字段中定义
修改Knative Serving中各Knative Service默认使用的域名的方法:
编辑knative-serving名称空间中的"configmap/config-domain"
在Data配置段中,直接指明要使用的域名即可;
xks.com: |
各Knative Service的路由中使用Hostname:
hostname.<namespace>.<domain.ltd>
域名映射:
把某个FQDN,与Knative Service建立起关联关系来,即为域名映射
集群外部:
client --> FQDN --> Knative Service Name
#config-domain
[root@xianchaomaster1 basic]# kubectl get cm -n knative-serving
NAME DATA AGE
config-autoscaler 1 172m
config-defaults 1 172m
config-deployment 2 172m
config-domain 1 172m
config-features 1 172m
config-gc 1 172m
config-istio 1 134m
config-leader-election 1 172m
config-logging 1 172m
config-network 1 172m
config-observability 1 172m
config-tracing 1 172m
istio-ca-root-cert 1 153m
kube-root-ca.crt 1 172m
[root@xianchaomaster1 basic]# kubectl edit configmap config-domain -n knative-serving
xks.com: |
configmap/config-domain edited
#demoapp.default.xks.com 过去生成的vs还是生效的
[root@xianchaomaster1 basic]# kubectl get vs
NAME GATEWAYS HOSTS AGE
demoapp-ingress ["knative-serving/knative-ingress-gateway","knative-serving/knative-local-gateway"] ["demoapp.default","demoapp.default.svc","demoapp.default.svc.cluster.local","demoapp.default.xks.com"] 112m
demoapp-mesh ["mesh"] ["demoapp.default","demoapp.default.svc","demoapp.default.svc.cluster.local"] 112m
hello-ingress ["knative-serving/knative-ingress-gateway","knative-serving/knative-local-gateway"] ["hello.default","hello.default.svc","hello.default.svc.cluster.local","hello.default.xks.com"] 47m
hello-mesh ["mesh"] ["hello.default","hello.default.svc","hello.default.svc.cluster.local"] 47m
#访问hello.default.example.com不没响应 改为 hello.default.xks.com能成功访问
[root@xianchaomaster1 basic]# curl -H "Host: hello.default.example.com" 192.168.40.190
[root@xianchaomaster1 basic]# curl -H "Host: hello.default.xks.com" 192.168.40.190
Hello Knative-CLI!
创建CDC
1.声明式创建
依赖的前提:
映射的域名,需要先在集群级别加以声明;
声明的方法:
ClusterDomainClaims CRD
#1.创建domain 并且需要声明CDC才可以使用 否者READY:FALSE
[root@xianchaomaster1 basic]# kn domain create hello.ik8s.io --ref ksvc:hello:default
Domain mapping 'hello.ik8s.io' created in namespace 'default'.
#因为没有进行 事先定义CDC 导致 READY状态为:False
[root@xianchaomaster1 basic]# kn domain list
NAME URL READY KSVC
hello.ik8s.io http://hello.ik8s.io False hello
[root@xianchaomaster1 basic]# kn domain describe hello.ik8s.io
Name: hello.ik8s.io
Namespace: default
Age: 36s
URL: http://hello.ik8s.io
Reference:
APIVersion: serving.knative.dev/v1
Kind: Service
Name: hello
Conditions:
OK TYPE AGE REASON
!! Ready 36s DomainAlreadyClaimed
?? CertificateProvisioned 36s
!! DomainClaimed 36s DomainAlreadyClaimed
?? IngressReady 36s IngressNotConfigured
?? ReferenceResolved 36s
#编辑CDC
[root@xianchaomaster1 domainmapping]# cat cdc-hello.ik8s.io.yaml
apiVersion: networking.internal.knative.dev/v1alpha1
kind: ClusterDomainClaim
metadata:
name: hello.ik8s.io
spec:
namespace: default
[root@xianchaomaster1 domainmapping]# kubectl apply -f cdc-hello.ik8s.io.yaml
clusterdomainclaim.networking.internal.knative.dev/hello.ik8s.io created
[root@xianchaomaster1 domainmapping]# kubectl get cdc
NAME AGE
hello.ik8s.io 5s
#此时报错已经被使用 重新删除再次创建就行
[root@xianchaomaster1 domainmapping]# kubectl get dm
NAME URL READY REASON
hello.ik8s.io http://hello.ik8s.io False DomainAlreadyClaimed
[root@xianchaomaster1 domainmapping]# kn domain delete hello.ik8s.io
Domain mapping 'hello.ik8s.io' deleted in namespace 'default'.
[root@xianchaomaster1 domainmapping]# kn domain create hello.ik8s.io --ref ksvc:hello
Domain mapping 'hello.ik8s.io' created in namespace 'default'.
#READY:TRUE
[root@xianchaomaster1 domainmapping]# kn domain list
NAME URL READY KSVC
hello.ik8s.io http://hello.ik8s.io True hello
[root@xianchaomaster1 domainmapping]# curl -H "Host: hello.ik8s.io" 192.168.40.190
Hello Knative-CLI!
2.自动化创建CDC
#编辑knative-serving名称空间中的"configmap/config-network",添加如下配置项:
#autocreate-cluster-domain-claims: "true"
[root@xianchaomaster1 domainmapping]# kubectl edit cm config-network -n knative-serving
autocreate-cluster-domain-claims: "true"
configmap/config-network edited
#查看目前只有之前的一个cdc
[root@xianchaomaster1 domainmapping]# kubectl get cdc
NAME AGE
hello.ik8s.io 10m
#重新创建一个新的域名指向www.ik8s.io =》 hello:default
[root@xianchaomaster1 domainmapping]# kn domain create www.ik8s.io --ref ksvc:hello:default
Domain mapping 'www.ik8s.io' created in namespace 'default'.
#此时不需要定义CDC 自动创建了
[root@xianchaomaster1 domainmapping]# kn domain list
NAME URL READY KSVC
hello.ik8s.io http://hello.ik8s.io True hello
www.ik8s.io http://www.ik8s.io True hello
[root@xianchaomaster1 domainmapping]# kubectl get cdc
NAME AGE
hello.ik8s.io 11m
www.ik8s.io 15s
#两个域名都能够访问到
[root@xianchaomaster1 domainmapping]# curl -H "Host: hello.ik8s.io" 192.168.40.190
Hello Knative-CLI!
[root@xianchaomaster1 domainmapping]# curl -H "Host: www.ik8s.io" 192.168.40.190
Hello Knative-CLI!