diff --git a/app/graphql/types/app_config/kas_type.rb b/app/graphql/types/app_config/kas_type.rb
index 506e4a5dd6f050d731ce79b52c87db8228853edd..7885198c0ea4e9218adada43d176503bc35b8c21 100644
--- a/app/graphql/types/app_config/kas_type.rb
+++ b/app/graphql/types/app_config/kas_type.rb
@@ -9,8 +9,12 @@ class KasType < ::Types::BaseObject
field :enabled, GraphQL::Types::Boolean, null: false,
description: 'Indicates whether the Kubernetes agent server is enabled.'
+ field :external_k8s_proxy_url, GraphQL::Types::String, null: true,
+ description: 'URL used by the Kubernetes tooling to communicate with the KAS Kubernetes API proxy.'
+ # rubocop:disable GraphQL/ExtractType -- we want to keep this way for backwards compatibility
field :external_url, GraphQL::Types::String, null: true,
description: 'URL used by the agents to communicate with the server.'
+ # rubocop:enable GraphQL/ExtractType
field :version, GraphQL::Types::String, null: true,
description: 'KAS version.'
end
diff --git a/app/models/app_config/kas_metadata.rb b/app/models/app_config/kas_metadata.rb
index 0867cbd271a11e80e1a4c1bc03b7ca10d09d0543..917eefaaf9b9ffd655b2c0f2c0d55c576369fbe2 100644
--- a/app/models/app_config/kas_metadata.rb
+++ b/app/models/app_config/kas_metadata.rb
@@ -2,7 +2,7 @@
module AppConfig
class KasMetadata
- attr_reader :enabled, :version, :external_url
+ attr_reader :enabled, :version, :external_url, :external_k8s_proxy_url
def self.declarative_policy_class
"AppConfig::InstanceMetadataPolicy"
@@ -12,6 +12,7 @@ def initialize
@enabled = Gitlab::Kas.enabled?
@version = Gitlab::Kas.version if @enabled
@external_url = Gitlab::Kas.external_url if @enabled
+ @external_k8s_proxy_url = Gitlab::Kas.tunnel_url if @enabled
end
end
end
diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md
index 7a5f1461bcc32d9e4b6d7d5c248a687a7a9e8731..4ca48468e10423b35202b43456e9e84907ce944d 100644
--- a/doc/api/graphql/reference/index.md
+++ b/doc/api/graphql/reference/index.md
@@ -26575,6 +26575,7 @@ Represents the Geo replication and verification state of a job_artifact.
| Name | Type | Description |
| ---- | ---- | ----------- |
| `enabled` | [`Boolean!`](#boolean) | Indicates whether the Kubernetes agent server is enabled. |
+| `externalK8sProxyUrl` | [`String`](#string) | URL used by the Kubernetes tooling to communicate with the KAS Kubernetes API proxy. |
| `externalUrl` | [`String`](#string) | URL used by the agents to communicate with the server. |
| `version` | [`String`](#string) | KAS version. |
diff --git a/doc/api/metadata.md b/doc/api/metadata.md
index 765ad2cc4e12a0eacd3c6e9a6e938d081d5f39c9..6dfe6b7ab8805ee1ffd0baa32f0c30e4a0332062 100644
--- a/doc/api/metadata.md
+++ b/doc/api/metadata.md
@@ -12,6 +12,7 @@ DETAILS:
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/357032) in GitLab 15.2.
> - `enterprise` [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/103969) in GitLab 15.6.
+> - `kas.externalK8sProxyUrl` [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/172373) in GitLab 17.6.
Retrieve metadata information for this GitLab instance.
@@ -21,15 +22,16 @@ GET /metadata
Response body attributes:
-| Attribute | Type | Description |
-|:------------------|:---------------|:-----------------------------------------------------------------------------------------|
-| `version` | string | Version of the GitLab instance. |
-| `revision` | string | Revision of the GitLab instance. |
-| `kas` | object | Metadata about the GitLab agent server for Kubernetes (KAS). |
-| `kas.enabled` | boolean | Indicates whether KAS is enabled. |
-| `kas.externalUrl` | string or null | URL used by the agents to communicate with KAS. It's `null` if `kas.enabled` is `false`. |
-| `kas.version` | string or null | Version of KAS. It's `null` if `kas.enabled` is `false`. |
-| `enterprise` | boolean | Indicates whether GitLab instance is Enterprise Edition. |
+| Attribute | Type | Description |
+|:--------------------------|:---------------|:------------------------------------------------------------------------------------------------------------------------------|
+| `version` | string | Version of the GitLab instance. |
+| `revision` | string | Revision of the GitLab instance. |
+| `kas` | object | Metadata about the GitLab agent server for Kubernetes (KAS). |
+| `kas.enabled` | boolean | Indicates whether KAS is enabled. |
+| `kas.externalUrl` | string or null | URL used by the agents to communicate with KAS. It's `null` if `kas.enabled` is `false`. |
+| `kas.externalK8sProxyUrl` | string or null | URL used by the Kubernetes tooling to communicate with the KAS Kubernetes API proxy. It's `null` if `kas.enabled` is `false`. |
+| `kas.version` | string or null | Version of KAS. It's `null` if `kas.enabled` is `false`. |
+| `enterprise` | boolean | Indicates whether GitLab instance is Enterprise Edition. |
Example request:
@@ -46,6 +48,7 @@ Example response:
"kas": {
"enabled": true,
"externalUrl": "grpc://gitlab.example.com:8150",
+ "externalK8sProxyUrl": "https://gitlab.example.com:8150/k8s-proxy",
"version": "15.0.0"
},
"enterprise": true
diff --git a/lib/api/entities/metadata.rb b/lib/api/entities/metadata.rb
index 7dfcad2ccabd3c9b936c9707050035d72a89835e..b396d3a2fc209ea222cab1dc8b74c62f719ee071 100644
--- a/lib/api/entities/metadata.rb
+++ b/lib/api/entities/metadata.rb
@@ -8,6 +8,7 @@ class Metadata < Grape::Entity
expose :kas do
expose :enabled, documentation: { type: 'boolean' }
expose :externalUrl, documentation: { type: 'string', example: 'grpc://gitlab.example.com:8150' }
+ expose :externalK8sProxyUrl, documentation: { type: 'string', example: 'https://gitlab.example.com:8150/k8s-proxy' }
expose :version, documentation: { type: 'string', example: '15.0.0' }
end
expose :enterprise, documentation: { type: 'boolean' }
diff --git a/lib/api/metadata.rb b/lib/api/metadata.rb
index d446f81f2cb6adbbe70f84703d39490fffaa4776..95cf3777300bfddf31e50a64aa79198291ad352a 100644
--- a/lib/api/metadata.rb
+++ b/lib/api/metadata.rb
@@ -21,6 +21,7 @@ class Metadata < ::API::Base
kas {
enabled
externalUrl
+ externalK8sProxyUrl
version
}
enterprise
diff --git a/spec/models/app_config/kas_metadata_spec.rb b/spec/models/app_config/kas_metadata_spec.rb
index df1127d5f73bbf4e4dfa008bb1e552b6f6fb7617..3c8a490bdecf2d393f0ef7daea329fcfc0222f5e 100644
--- a/spec/models/app_config/kas_metadata_spec.rb
+++ b/spec/models/app_config/kas_metadata_spec.rb
@@ -14,7 +14,8 @@
expect(described_class.new).to have_attributes(
enabled: Gitlab::Kas.enabled?,
version: Gitlab::Kas.version,
- external_url: Gitlab::Kas.external_url
+ external_url: Gitlab::Kas.external_url,
+ external_k8s_proxy_url: Gitlab::Kas.tunnel_url
)
end
end
@@ -26,7 +27,8 @@
expect(described_class.new).to have_attributes(
enabled: Gitlab::Kas.enabled?,
version: nil,
- external_url: nil
+ external_url: nil,
+ external_k8s_proxy_url: nil
)
end
end
diff --git a/spec/requests/api/graphql/metadata_query_spec.rb b/spec/requests/api/graphql/metadata_query_spec.rb
index de54fbe75e7d0ded48f6060688b8dd346d0271e3..d19fe9da797f64b19fd6bb2e0ac70c77759d6a1a 100644
--- a/spec/requests/api/graphql/metadata_query_spec.rb
+++ b/spec/requests/api/graphql/metadata_query_spec.rb
@@ -18,7 +18,8 @@
'kas' => {
'enabled' => Gitlab::Kas.enabled?,
'version' => expected_kas_version,
- 'externalUrl' => expected_kas_external_url
+ 'externalUrl' => expected_kas_external_url,
+ 'externalK8sProxyUrl' => expected_kas_external_k8s_proxy_url
},
'enterprise' => Gitlab.ee?
}
@@ -28,6 +29,7 @@
context 'kas is enabled' do
let(:expected_kas_version) { Gitlab::Kas.version }
let(:expected_kas_external_url) { Gitlab::Kas.external_url }
+ let(:expected_kas_external_k8s_proxy_url) { Gitlab::Kas.tunnel_url }
before do
allow(Gitlab::Kas).to receive(:enabled?).and_return(true)
@@ -43,6 +45,7 @@
context 'kas is disabled' do
let(:expected_kas_version) { nil }
let(:expected_kas_external_url) { nil }
+ let(:expected_kas_external_k8s_proxy_url) { nil }
before do
allow(Gitlab::Kas).to receive(:enabled?).and_return(false)