Skip to content

Commit

Permalink
Add agent mTLS (#430)
Browse files Browse the repository at this point in the history
* Add agent mTLS

* review fixes
  • Loading branch information
ukclivecox authored Sep 9, 2022
1 parent e824324 commit 4f0b99d
Show file tree
Hide file tree
Showing 35 changed files with 2,713 additions and 2,167 deletions.
3 changes: 3 additions & 0 deletions components/tls/pkg/tls/secret.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ type TlsSecretHandler struct {
}

func NewTlsSecretHandler(secretName string, namespace string, clientset kubernetes.Interface, logger log.FieldLogger) (*TlsSecretHandler, error) {
if clientset == nil {
return nil, fmt.Errorf("Need clientset to run TLS Secrets Handler")
}
return &TlsSecretHandler{
secretName: secretName,
clientset: clientset,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ Certificates will be loaded and used for the desired gRPC services. The secrets

For the control plane mTLS can be used on gRPC services:

* Scheduler gRPC service: envar service name: SCHEDULER
* Agent gRPC service: WIP
* Scheduler gRPC service: envar service prefix: SCHEDULER
* Agent gRPC service: envar service prefix: AGENT
* Dataflow gRPC service: WIP

### Helm Control Plane Install
Expand All @@ -37,7 +37,9 @@ When installing `seldon-core-v2-setup` you can set the secret names for your cer
```bash
helm install seldon-v2 k8s/helm-charts/seldon-core-v2-setup/ -n seldon-mesh \
--set scheduler.tls.scheduler.server.secret=seldon-scheduler-server \
--set scheduler.tls.scheduler.client.secret=seldon-scheduler-client
--set scheduler.tls.scheduler.client.secret=seldon-scheduler-client \
--set scheduler.tls.agent.server.secret=seldon-agent-server \
--set scheduler.tls.agent.client.secret=seldon-agent-client
```

## Data Plane
Expand All @@ -57,13 +59,15 @@ From the project root run:

### Raw YAML

Raw yaml Certificates can be created with:

```
kubectl create -f k8s/yaml/certs.yaml
kubectl create -f k8s/yaml/certs.yaml -n seldon-mesh
```

### Helm

You can install into the desired namespace, here we use `seldon-mesh` as an example.
You can install Certificates into the desired namespace, here we use `seldon-mesh` as an example.

```
helm install seldon-v2-certs k8s/helm-charts/seldon-core-v2-certs/ -n seldon-mesh
Expand Down
40 changes: 40 additions & 0 deletions k8s/helm-charts/seldon-core-v2-certs/templates/certs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -71,3 +71,43 @@ spec:
issuerRef:
name: seldon-ca-issuer
kind: Issuer
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: seldon-agent-server
spec:
secretName: seldon-agent-server
duration: 2160h
renewBefore: 360h
commonName: "seldon-mesh.svc"
dnsNames:
- "seldon-scheduler"
- "seldon-scheduler.svc"
- localhost
usages:
- server auth
- client auth
issuerRef:
name: seldon-ca-issuer
kind: Issuer
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: seldon-agent-client
spec:
secretName: seldon-agent-client
duration: 2160h
renewBefore: 360h
commonName: "seldon-mesh.svc"
dnsNames:
- "seldon-scheduler"
- "seldon-scheduler.svc"
- localhost
usages:
- server auth
- client auth
issuerRef:
name: seldon-ca-issuer
kind: Issuer
2,138 changes: 1,120 additions & 1,018 deletions k8s/helm-charts/seldon-core-v2-crds/templates/seldon-v2-crds.yaml

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,14 @@ rules:
- secrets
verbs:
- get
- apiGroups:
- ""
resources:
- secrets
verbs:
- get
- list
- watch
{{ if .Values.hodometer.enabled }}
---
apiVersion: rbac.authorization.k8s.io/v1
Expand Down Expand Up @@ -505,6 +513,10 @@ spec:
port: 9005
protocol: TCP
targetPort: agent
- name: agent-mtls
port: 9055
protocol: TCP
targetPort: agent-mtls
- name: dataflow
port: 9008
protocol: TCP
Expand Down Expand Up @@ -884,6 +896,10 @@ spec:
value: '{{ .Values.scheduler.tls.scheduler.server.secret }}'
- name: SCHEDULER_TLS_FOLDER_PATH
value: '{{ .Values.scheduler.tls.scheduler.server.folder }}'
- name: AGENT_TLS_SECRET_NAME
value: '{{ .Values.scheduler.tls.agent.server.secret }}'
- name: AGENT_TLS_FOLDER_PATH
value: '{{ .Values.scheduler.tls.agent.server.folder }}'
- name: ALLOW_PLAINTXT
value: "true"
- name: POD_NAMESPACE
Expand All @@ -903,6 +919,8 @@ spec:
name: scheduler-mtls
- containerPort: 9005
name: agent
- containerPort: 9055
name: agent-mtls
- containerPort: 9008
name: dataflow
resources:
Expand Down Expand Up @@ -970,6 +988,10 @@ spec:
value: '{{ .Values.serverConfig.mlserver.serverCapabilities }}'
- name: SELDON_OVERCOMMIT_PERCENTAGE
value: '{{ .Values.serverConfig.mlserver.overcommitPercentage }}'
- name: AGENT_TLS_SECRET_NAME
value: '{{ .Values.scheduler.tls.agent.client.secret }}'
- name: AGENT_TLS_FOLDER_PATH
value: '{{ .Values.scheduler.tls.agent.client.folder }}'
- name: SELDON_SERVER_HTTP_PORT
value: "9000"
- name: SELDON_SERVER_GRPC_PORT
Expand All @@ -982,6 +1004,8 @@ spec:
value: seldon-scheduler
- name: SELDON_SCHEDULER_PORT
value: "9005"
- name: SELDON_SCHEDULER_TLS_PORT
value: "9055"
- name: SELDON_METRICS_PORT
value: "9006"
- name: SELDON_SERVER_TYPE
Expand All @@ -994,6 +1018,10 @@ spec:
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: MEMORY_REQUEST
valueFrom:
resourceFieldRef:
Expand Down Expand Up @@ -1131,6 +1159,10 @@ spec:
value: '{{ .Values.serverConfig.triton.serverCapabilities }}'
- name: SELDON_OVERCOMMIT_PERCENTAGE
value: '{{ .Values.serverConfig.triton.overcommitPercentage }}'
- name: AGENT_TLS_SECRET_NAME
value: '{{ .Values.scheduler.tls.agent.client.secret }}'
- name: AGENT_TLS_FOLDER_PATH
value: '{{ .Values.scheduler.tls.agent.client.folder }}'
- name: SELDON_SERVER_HTTP_PORT
value: "9000"
- name: SELDON_SERVER_GRPC_PORT
Expand All @@ -1151,6 +1183,10 @@ spec:
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: MEMORY_REQUEST
valueFrom:
resourceFieldRef:
Expand Down
7 changes: 7 additions & 0 deletions k8s/helm-charts/seldon-core-v2-setup/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,13 @@ scheduler:
client:
secret:
folder:
agent:
server:
secret:
folder:
client:
secret:
folder:
serverConfig:
rclone:
image:
Expand Down
7 changes: 7 additions & 0 deletions k8s/helm-charts/seldon-core-v2-setup/values.yaml.template
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,13 @@ scheduler:
client:
secret:
folder:
agent:
server:
secret:
folder:
client:
secret:
folder:
serverConfig:
rclone:
image:
Expand Down
4 changes: 4 additions & 0 deletions k8s/kustomize/helm-components/patch_mlserver.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ spec:
value: '{{ .Values.serverConfig.mlserver.serverCapabilities }}'
- name: SELDON_OVERCOMMIT_PERCENTAGE
value: '{{ .Values.serverConfig.mlserver.overcommitPercentage }}'
- name: AGENT_TLS_SECRET_NAME
value: '{{ .Values.scheduler.tls.agent.client.secret }}'
- name: AGENT_TLS_FOLDER_PATH
value: '{{ .Values.scheduler.tls.agent.client.folder }}'
image: '{{ .Values.serverConfig.agent.image.registry }}/{{ .Values.serverConfig.agent.image.repository }}:{{ .Values.serverConfig.agent.image.tag }}'
imagePullPolicy: '{{ .Values.serverConfig.rclone.image.pullPolicy }}'
name: agent
Expand Down
4 changes: 4 additions & 0 deletions k8s/kustomize/helm-components/patch_scheduler.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,7 @@ spec:
value: '{{ .Values.scheduler.tls.scheduler.server.secret }}'
- name: SCHEDULER_TLS_FOLDER_PATH
value: '{{ .Values.scheduler.tls.scheduler.server.folder }}'
- name: AGENT_TLS_SECRET_NAME
value: '{{ .Values.scheduler.tls.agent.server.secret }}'
- name: AGENT_TLS_FOLDER_PATH
value: '{{ .Values.scheduler.tls.agent.server.folder }}'
4 changes: 4 additions & 0 deletions k8s/kustomize/helm-components/patch_triton.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ spec:
value: '{{ .Values.serverConfig.triton.serverCapabilities }}'
- name: SELDON_OVERCOMMIT_PERCENTAGE
value: '{{ .Values.serverConfig.triton.overcommitPercentage }}'
- name: AGENT_TLS_SECRET_NAME
value: '{{ .Values.scheduler.tls.agent.client.secret }}'
- name: AGENT_TLS_FOLDER_PATH
value: '{{ .Values.scheduler.tls.agent.client.folder }}'
image: '{{ .Values.serverConfig.agent.image.registry }}/{{ .Values.serverConfig.agent.image.repository }}:{{ .Values.serverConfig.agent.image.tag }}'
imagePullPolicy: '{{ .Values.serverConfig.rclone.image.pullPolicy }}'
name: agent
Expand Down
40 changes: 40 additions & 0 deletions k8s/yaml/certs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -71,3 +71,43 @@ spec:
issuerRef:
name: seldon-ca-issuer
kind: Issuer
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: seldon-agent-server
spec:
secretName: seldon-agent-server
duration: 2160h
renewBefore: 360h
commonName: "seldon-mesh.svc"
dnsNames:
- "seldon-scheduler"
- "seldon-scheduler.svc"
- localhost
usages:
- server auth
- client auth
issuerRef:
name: seldon-ca-issuer
kind: Issuer
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: seldon-agent-client
spec:
secretName: seldon-agent-client
duration: 2160h
renewBefore: 360h
commonName: "seldon-mesh.svc"
dnsNames:
- "seldon-scheduler"
- "seldon-scheduler.svc"
- localhost
usages:
- server auth
- client auth
issuerRef:
name: seldon-ca-issuer
kind: Issuer
36 changes: 36 additions & 0 deletions k8s/yaml/seldon-v2-components.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,14 @@ rules:
- secrets
verbs:
- get
- apiGroups:
- ""
resources:
- secrets
verbs:
- get
- list
- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
Expand Down Expand Up @@ -526,6 +534,10 @@ spec:
port: 9005
protocol: TCP
targetPort: agent
- name: agent-mtls
port: 9055
protocol: TCP
targetPort: agent-mtls
- name: dataflow
port: 9008
protocol: TCP
Expand Down Expand Up @@ -888,6 +900,10 @@ spec:
value: ""
- name: SCHEDULER_TLS_FOLDER_PATH
value: ""
- name: AGENT_TLS_SECRET_NAME
value: ""
- name: AGENT_TLS_FOLDER_PATH
value: ""
- name: POD_NAMESPACE
valueFrom:
fieldRef:
Expand All @@ -904,6 +920,8 @@ spec:
name: scheduler-mtls
- containerPort: 9005
name: agent
- containerPort: 9055
name: agent-mtls
- containerPort: 9008
name: dataflow
resources:
Expand Down Expand Up @@ -981,8 +999,14 @@ spec:
value: seldon-scheduler
- name: SELDON_SCHEDULER_PORT
value: "9005"
- name: SELDON_SCHEDULER_TLS_PORT
value: "9055"
- name: SELDON_METRICS_PORT
value: "9006"
- name: AGENT_TLS_SECRET_NAME
value: ""
- name: AGENT_TLS_FOLDER_PATH
value: ""
- name: SELDON_SERVER_TYPE
value: mlserver
- name: SELDON_ENVOY_HOST
Expand All @@ -993,6 +1017,10 @@ spec:
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: MEMORY_REQUEST
valueFrom:
resourceFieldRef:
Expand Down Expand Up @@ -1134,6 +1162,10 @@ spec:
value: "9001"
- name: SELDON_REVERSE_PROXY_GRPC_PORT
value: "9501"
- name: AGENT_TLS_SECRET_NAME
value: ""
- name: AGENT_TLS_FOLDER_PATH
value: ""
- name: SELDON_SCHEDULER_HOST
value: seldon-scheduler
- name: SELDON_SCHEDULER_PORT
Expand All @@ -1146,6 +1178,10 @@ spec:
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: MEMORY_REQUEST
valueFrom:
resourceFieldRef:
Expand Down
Loading

0 comments on commit 4f0b99d

Please sign in to comment.