Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add context path support and add helm sample #3205

Merged
merged 2 commits into from
Aug 1, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,18 +1,30 @@
package com.ctrip.framework.apollo.portal.controller;

import com.google.common.base.Strings;
import javax.servlet.ServletContext;
import org.springframework.beans.factory.annotation.Value;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class PrefixPathController {

private final ServletContext servletContext;

// We suggest users use server.servlet.context-path to configure the prefix path instead
@Deprecated
@Value("${prefix.path:}")
private String prefixPath;

public PrefixPathController(ServletContext servletContext) {
this.servletContext = servletContext;
}

@GetMapping("/prefix-path")
public String getPrefixPath(){
public String getPrefixPath() {
if (Strings.isNullOrEmpty(prefixPath)) {
return servletContext.getContextPath();
}
return prefixPath;
}

189 changes: 180 additions & 9 deletions scripts/helm/README.md
Original file line number Diff line number Diff line change
@@ -20,7 +20,7 @@ $ helm search repo apollo

## 4. Deployments of apollo-configservice and apollo-adminservice

### 4.1 Installation
### 4.1 Install

apollo-configservice and apollo-adminservice should be installed per environment, so it is suggested to indicate environment in the release name, e.g. `apollo-service-dev`

@@ -32,21 +32,22 @@ $ helm install apollo-service-dev \
--set configdb.service.enabled=true \
--set configService.replicaCount=1 \
--set adminService.replicaCount=1 \
-n your-namespace \
apollo/apollo-service
```

Or customize it with values.yaml

```bash
$ helm install apollo-service-dev -f values.yaml apollo/apollo-service
$ helm install apollo-service-dev -f values.yaml -n your-namespace apollo/apollo-service
```

### 4.2 Uninstallation
### 4.2 Uninstall

To uninstall/delete the `apollo-service-dev` deployment:

```bash
$ helm uninstall apollo-service-dev
$ helm uninstall -n your-namespace apollo-service-dev
```

### 4.3 Configuration
@@ -64,7 +65,7 @@ The following table lists the configurable parameters of the apollo-service char
| `configdb.service.enabled` | Whether to create a Kubernetes Service for `configdb.host` or not. Set it to `true` if `configdb.host` is an endpoint outside of the kubernetes cluster | `false` |
| `configdb.service.fullNameOverride` | Override the service name for apollo config db | `nil` |
| `configdb.service.port` | The port for the service of apollo config db | `3306` |
| `configdb.service.type` | The service type of apollo config db: `ClusterIP` or `ExternalName` | `ClusterIP` |
| `configdb.service.type` | The service type of apollo config db: `ClusterIP` or `ExternalName`. If the host is a DNS name, please specify `ExternalName` as the service type, e.g. xxx.mysql.rds.aliyuncs.com | `ClusterIP` |
| `configService.fullNameOverride` | Override the deployment name for apollo-configservice | `nil` |
| `configService.replicaCount` | Replica count of apollo-configservice | `2` |
| `configService.containerPort` | Container port of apollo-configservice | `8080` |
@@ -79,6 +80,7 @@ The following table lists the configurable parameters of the apollo-service char
| `configService.liveness.periodSeconds` | The period seconds of liveness probe | `10` |
| `configService.readiness.initialDelaySeconds` | The initial delay seconds of readiness probe | `30` |
| `configService.readiness.periodSeconds` | The period seconds of readiness probe | `5` |
| `configService.config.profiles` | specify the spring profiles to activate | `github,kubernetes` |
| `configService.config.configServiceUrlOverride` | Override `apollo.config-service.url`: config service url to be accessed by apollo-client | `nil` |
| `configService.config.adminServiceUrlOverride` | Override `apollo.admin-service.url`: admin service url to be accessed by apollo-portal | `nil` |
| `configService.env` | Environment variables passed to the container, e.g. <br />`JAVA_OPTS: -Xss256k` | `{}` |
@@ -101,16 +103,55 @@ The following table lists the configurable parameters of the apollo-service char
| `adminService.liveness.periodSeconds` | The period seconds of liveness probe | `10` |
| `adminService.readiness.initialDelaySeconds` | The initial delay seconds of readiness probe | `30` |
| `adminService.readiness.periodSeconds` | The period seconds of readiness probe | `5` |
| `adminService.config.profiles` | specify the spring profiles to activate | `github,kubernetes` |
| `adminService.env` | Environment variables passed to the container, e.g. <br />`JAVA_OPTS: -Xss256k` | `{}` |
| `adminService.strategy` | The deployment strategy of apollo-adminservice | `{}` |
| `adminService.resources` | The resources definition of apollo-adminservice | `{}` |
| `adminService.nodeSelector` | The node selector definition of apollo-adminservice | `{}` |
| `adminService.tolerations` | The tolerations definition of apollo-adminservice | `[]` |
| `adminService.affinity` | The affinity definition of apollo-adminservice | `{}` |

### 4.4 Sample

1. ConfigDB host is an IP outside of kubernetes cluster

```yaml
configdb:
host: 1.2.3.4
dbName: ApolloConfigDBName
userName: someUserName
password: somePassword
connectionStringProperties: characterEncoding=utf8&useSSL=false
service:
enabled: true
```

2. ConfigDB host is a dns name outside of kubernetes cluster

```yaml
configdb:
host: xxx.mysql.rds.aliyuncs.com
dbName: ApolloConfigDBName
userName: someUserName
password: somePassword
connectionStringProperties: characterEncoding=utf8&useSSL=false
service:
enabled: true
type: ExternalName
```
3. ConfigDB host is a kubernetes service

```yaml
configdb:
host: apollodb-mysql.mysql
dbName: ApolloConfigDBName
userName: someUserName
password: somePassword
connectionStringProperties: characterEncoding=utf8&useSSL=false
```
## 5. Deployments of apollo-portal

### 5.1 Installation
### 5.1 Install

To install the apollo-portal chart with the release name `apollo-portal`:

@@ -124,21 +165,22 @@ $ helm install apollo-portal \
--set config.metaServers.dev=http://apollo-service-dev-apollo-configservice:8080 \
--set config.metaServers.pro=http://apollo-service-pro-apollo-configservice:8080 \
--set replicaCount=1 \
-n your-namespace \
apollo/apollo-portal
```

Or customize it with values.yaml

```bash
$ helm install apollo-portal -f values.yaml apollo/apollo-portal
$ helm install apollo-portal -f values.yaml -n your-namespace apollo/apollo-portal
```

### 5.2 Uninstallation

To uninstall/delete the `apollo-portal` deployment:

```bash
$ helm uninstall apollo-portal
$ helm uninstall -n your-namespace apollo-portal
```

### 5.3 Configuration
@@ -173,8 +215,11 @@ The following table lists the configurable parameters of the apollo-portal chart
| `nodeSelector` | The node selector definition of apollo-portal | `{}` |
| `tolerations` | The tolerations definition of apollo-portal | `[]` |
| `affinity` | The affinity definition of apollo-portal | `{}` |
| `config.profiles` | specify the spring profiles to activate | `github,auth` |
| `config.envs` | specify the env names, e.g. dev,pro | `nil` |
| `config.contextPath` | specify the context path, e.g. `/apollo`, then users could access portal via `http://{portal_address}/apollo` | `nil` |
| `config.metaServers` | specify the meta servers, e.g.<br />`dev: http://apollo-configservice-dev:8080`<br />`pro: http://apollo-configservice-pro:8080` | `{}` |
| `config.files` | specify the extra config files for apollo-portal, e.g. application-ldap.yml | `{}` |
| `portaldb.host` | The host for apollo portal db | `nil` |
| `portaldb.port` | The port for apollo portal db | `3306` |
| `portaldb.dbName` | The database name for apollo portal db | `ApolloPortalDB` |
@@ -184,4 +229,130 @@ The following table lists the configurable parameters of the apollo-portal chart
| `portaldb.service.enabled` | Whether to create a Kubernetes Service for `portaldb.host` or not. Set it to `true` if `portaldb.host` is an endpoint outside of the kubernetes cluster | `false` |
| `portaldb.service.fullNameOverride` | Override the service name for apollo portal db | `nil` |
| `portaldb.service.port` | The port for the service of apollo portal db | `3306` |
| `portaldb.service.type` | The service type of apollo portal db: `ClusterIP` or `ExternalName` | `ClusterIP` |
| `portaldb.service.type` | The service type of apollo portal db: `ClusterIP` or `ExternalName`. If the host is a DNS name, please specify `ExternalName` as the service type, e.g. xxx.mysql.rds.aliyuncs.com | `ClusterIP` |

### 5.4 Sample

1. PortalDB host is an IP outside of kubernetes cluster

```yaml
portaldb:
host: 1.2.3.4
dbName: ApolloPortalDBName
userName: someUserName
password: somePassword
connectionStringProperties: characterEncoding=utf8&useSSL=false
service:
enabled: true
```

2. PortalDB host is a dns name outside of kubernetes cluster

```yaml
portaldb:
host: xxx.mysql.rds.aliyuncs.com
dbName: ApolloPortalDBName
userName: someUserName
password: somePassword
connectionStringProperties: characterEncoding=utf8&useSSL=false
service:
enabled: true
type: ExternalName
```
3. PortalDB host is a kubernetes service

```yaml
portaldb:
host: apollodb-mysql.mysql
dbName: ApolloPortalDBName
userName: someUserName
password: somePassword
connectionStringProperties: characterEncoding=utf8&useSSL=false
```

4. Specify environments

```yaml
config:
envs: dev,pro
metaServers:
dev: http://apollo-service-dev-apollo-configservice:8080
pro: http://apollo-service-pro-apollo-configservice:8080
```

5. Expose service as Load Balancer

```yaml
service:
type: LoadBalancer
```

6. Expose service as Ingress

```yaml
ingress:
enabled: true
hosts:
- paths:
- /
```

7. Expose service as Ingress with custom path `/apollo`

```yaml
# use /apollo as root, should specify config.contextPath as /apollo
ingress:
enabled: true
hosts:
- paths:
- /apollo

config:
...
contextPath: /apollo
...
```

8. Expose service as Ingress with session affinity

```yaml
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/affinity-mode: "persistent"
nginx.ingress.kubernetes.io/session-cookie-conditional-samesite-none: "true"
nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
hosts:
- host: xxx.somedomain.com # host is required to make session affinity work
paths:
- /
```

9. Enable LDAP support

```yaml
config:
...
profiles: github,ldap
...
files:
application-ldap.yml: |
spring:
ldap:
base: "dc=example,dc=org"
username: "cn=admin,dc=example,dc=org"
password: "password"
searchFilter: "(uid={0})"
urls:
- "ldap://xxx.somedomain.com:389"

ldap:
mapping:
objectClass: "inetOrgPerson"
loginId: "uid"
userDisplayName: "cn"
email: "mail"
```
24 changes: 20 additions & 4 deletions scripts/helm/apollo-portal/templates/deployment-portal.yaml
Original file line number Diff line number Diff line change
@@ -13,10 +13,17 @@ data:
{{- if .Values.config.envs }}
apollo.portal.envs = {{ .Values.config.envs }}
{{- end }}
{{- if .Values.config.contextPath }}
server.servlet.context-path = {{ .Values.config.contextPath }}
{{- end }}
apollo-env.properties: |
{{- range $env, $address := .Values.config.metaServers }}
{{ $env }}.meta = {{ $address }}
{{- end }}
{{- range $fileName, $content := .Values.config.files }}
{{ $fileName | indent 2 }}: |
{{ $content | indent 4 }}
{{- end }}

---
kind: Deployment
@@ -52,6 +59,10 @@ spec:
path: application-github.properties
- key: apollo-env.properties
path: apollo-env.properties
{{- range $fileName, $content := .Values.config.files }}
- key: {{ $fileName }}
path: {{ $fileName }}
{{- end }}
defaultMode: 420
containers:
- name: {{ .Values.name }}
@@ -61,28 +72,33 @@ spec:
- name: http
containerPort: {{ .Values.containerPort }}
protocol: TCP
{{- with .Values.env }}
env:
{{- range $key, $value := . }}
- name: SPRING_PROFILES_ACTIVE
value: {{ .Values.config.profiles | quote }}
{{- range $key, $value := .Values.env }}
- name: {{ $key }}
value: {{ $value }}
{{- end }}
{{- end }}
volumeMounts:
- name: configmap-{{ $portalFullName }}
mountPath: /apollo-portal/config/application-github.properties
subPath: application-github.properties
- name: configmap-{{ $portalFullName }}
mountPath: /apollo-portal/config/apollo-env.properties
subPath: apollo-env.properties
{{- range $fileName, $content := .Values.config.files }}
- name: configmap-{{ $portalFullName }}
mountPath: /apollo-portal/config/{{ $fileName }}
subPath: {{ $fileName }}
{{- end }}
livenessProbe:
tcpSocket:
port: {{ .Values.containerPort }}
initialDelaySeconds: {{ .Values.liveness.initialDelaySeconds }}
periodSeconds: {{ .Values.liveness.periodSeconds }}
readinessProbe:
httpGet:
path: /health
path: {{ .Values.config.contextPath }}/health
port: {{ .Values.containerPort }}
initialDelaySeconds: {{ .Values.readiness.initialDelaySeconds }}
periodSeconds: {{ .Values.readiness.periodSeconds }}
6 changes: 6 additions & 0 deletions scripts/helm/apollo-portal/values.yaml
Original file line number Diff line number Diff line change
@@ -34,12 +34,18 @@ tolerations: []
affinity: {}

config:
# spring profiles to activate
profiles: "github,auth"
# specify the env names, e.g. dev,pro
envs: ""
# specify the meta servers, e.g.
# dev: http://apollo-configservice-dev:8080
# pro: http://apollo-configservice-pro:8080
metaServers: {}
# specify the context path, e.g. /apollo
contextPath: ""
# extra config files for apollo-portal, e.g. application-ldap.yml
files: {}

portaldb:
name: apollo-portaldb
Loading