What is my Custom Resource Definition URL in Kubernetes

9/13/2019

I am trying to hit my custom resource definition endpoint in Kubernetes but cannot find an exact example for how Kubernetes exposes my custom resource definition in the Kubernetes API. If I hit the custom services API with this:

https://localhost:6443/apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions

I get back this response

"items": [
    {
        "metadata": {
            "name": "accounts.stable.ibm.com",
            "selfLink": "/apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/accounts.stable.ibm.com",
            "uid": "eda9d695-d3d4-11e9-900f-025000000001",
            "resourceVersion": "167252",
            "generation": 1,
            "creationTimestamp": "2019-09-10T14:11:48Z",
            "deletionTimestamp": "2019-09-12T22:26:20Z",
            "finalizers": [
                "customresourcecleanup.apiextensions.k8s.io"
            ]
        },
        "spec": {
            "group": "stable.ibm.com",
            "version": "v1",
            "names": {
                "plural": "accounts",
                "singular": "account",
                "shortNames": [
                    "acc"
                ],
                "kind": "Account",
                "listKind": "AccountList"
            },
            "scope": "Namespaced",
            "versions": [
                {
                    "name": "v1",
                    "served": true,
                    "storage": true
                }
            ],
            "conversion": {
                "strategy": "None"
            }
        },
        "status": {
            "conditions": [
                {
                    "type": "NamesAccepted",
                    "status": "True",
                    "lastTransitionTime": "2019-09-10T14:11:48Z",
                    "reason": "NoConflicts",
                    "message": "no conflicts found"
                },
                {
                    "type": "Established",
                    "status": "True",
                    "lastTransitionTime": null,
                    "reason": "InitialNamesAccepted",
                    "message": "the initial names have been accepted"
                },
                {
                    "type": "Terminating",
                    "status": "True",
                    "lastTransitionTime": "2019-09-12T22:26:20Z",
                    "reason": "InstanceDeletionCheck",
                    "message": "could not confirm zero CustomResources remaining: timed out waiting for the condition"
                }
            ],
            "acceptedNames": {
                "plural": "accounts",
                "singular": "account",
                "shortNames": [
                    "acc"
                ],
                "kind": "Account",
                "listKind": "AccountList"
            },
            "storedVersions": [
                "v1"
            ]
        }
    }
]
}

This leads me to believe I have correctly created the custom resource accounts. There are a number of examples that don't seem to be quite right and I cannot find my resource in the Kubernetes REST api. I can use with my custom resource from kubectl but I need to expose it with RESTful APIs.

https://localhost:6443/apis/stable.example.com/v1/namespaces/default/accounts

returns

404 page not found

Where as:

https://localhost:6443/apis/apiextensions.k8s.io/v1beta1/apis/stable.ibm.com/namespaces/default/accounts

returns

{
"kind": "Status",
"apiVersion": "v1",
"metadata": {},
"status": "Failure",
"message": "the server could not find the requested resource",
"reason": "NotFound",
"details": {},
"code": 404
}

I have looked at https://docs.okd.io/latest/admin_guide/custom_resource_definitions.html and https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/

The exact URL would be appreciated.

-- musterjunk
kubernetes
kubernetes-custom-resources
rest

1 Answer

9/17/2019

This is a quite decent way retrieving K8s REST API resource executing kubectl get command on some top debugging levels, like @Suresh Vishnoi mentioned in the comment:

kubectl get <api-resource> -v=8

Apparently, eventually checked by @Amit Kumar Gupta, the correct URL accessing custom resource as per your CRD json output is the following:

https://<API_server>:port/apis/stable.ibm.com/v1/namespaces/default/accounts

Depending on the authentication method you may choose: X509 Client Certs, Static Token File, Bearer Token or HTTP API proxy in order to authenticate user requests against Kubernetes API.

-- mk_sta
Source: StackOverflow