bind, cert-manager: Cleanups
This commit is contained in:
		@@ -1,32 +1,31 @@
 | 
			
		||||
#TODO:
 | 
			
		||||
# Bind namespace
 | 
			
		||||
 | 
			
		||||
- cert-manager talks to master to add domain names, and DNS-01 TLS through ns1.k-space.ee
 | 
			
		||||
^ both-side link to cert-manager
 | 
			
		||||
The Bind secondary servers and `external-dns` service pods are running in this namespace.
 | 
			
		||||
The `external-dns` pods are used to declaratively update DNS records on the
 | 
			
		||||
[Bind primary](https://git.k-space.ee/k-space/ansible/src/branch/main/authoritative-nameserver.yaml).
 | 
			
		||||
 | 
			
		||||
bind-services (zone transfer to HA replicas from ns1.k-space.ee)
 | 
			
		||||
 | 
			
		||||
### ns1.k-space.ee
 | 
			
		||||
Primary authoritive nameserver replica. Other replicas live on Kube nodes
 | 
			
		||||
Idea to move it to Zone.
 | 
			
		||||
 | 
			
		||||
dns.yaml files add DNS records
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Bind setup
 | 
			
		||||
 | 
			
		||||
The Bind primary resides outside Kubernetes at `193.40.103.2` and
 | 
			
		||||
The Bind primary `ns1.k-space.ee` resides outside Kubernetes at `193.40.103.2` and
 | 
			
		||||
it's internally reachable via `172.20.0.2`.
 | 
			
		||||
 | 
			
		||||
Bind secondaries perform AXFR (zone transfer) from `ns1.k-space.ee` using
 | 
			
		||||
shared secret autentication.
 | 
			
		||||
The primary triggers notification events to `172.20.53.{1..3}`
 | 
			
		||||
which are internally exposed IP-s of the secondaries.
 | 
			
		||||
Bind secondaries are hosted inside Kubernetes, load balanced behind `62.65.250.2` and
 | 
			
		||||
under normal circumstances managed by [ArgoCD](https://argocd.k-space.ee/applications/argocd/bind).
 | 
			
		||||
 | 
			
		||||
Ingresses and DNSEndpoints referring to `k-space.ee`, `kspace.ee`, `k6.ee`
 | 
			
		||||
are picked up automatically by `external-dns` and updated on primary.
 | 
			
		||||
Note that [cert-manager](https://git.k-space.ee/k-space/kube/src/branch/master/cert-manager/issuer.yml) also performs DNS updates on the Bind primary.
 | 
			
		||||
 | 
			
		||||
The primary triggers notification events to `172.20.53.{1..3}`
 | 
			
		||||
which are internally exposed IP-s of the secondaries.
 | 
			
		||||
 | 
			
		||||
# Secrets
 | 
			
		||||
# For user
 | 
			
		||||
 | 
			
		||||
`Ingresses` and `DNSEndpoint` resources under `k-space.ee`, `kspace.ee`, `k6.ee`
 | 
			
		||||
domains are picked up automatically by `external-dns` and updated on the Bind primary.
 | 
			
		||||
To find usage examples in this repository use
 | 
			
		||||
`grep -r -A25 "^kind: Ingress" .` and
 | 
			
		||||
`grep -R -r -A100 "^kind: DNSEndpoint" .`
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# For administrator
 | 
			
		||||
 | 
			
		||||
To configure TSIG secrets:
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,10 @@
 | 
			
		||||
# yamllint disable rule:line-length
 | 
			
		||||
---
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: ConfigMap
 | 
			
		||||
metadata:
 | 
			
		||||
  name: bind-secondary-config-local
 | 
			
		||||
  namespace: bind
 | 
			
		||||
data:
 | 
			
		||||
  named.conf.local: |
 | 
			
		||||
    zone "codemowers.ee" { type slave; masters { 172.20.0.2 key readonly; }; };
 | 
			
		||||
@@ -13,6 +15,7 @@ apiVersion: v1
 | 
			
		||||
kind: ConfigMap
 | 
			
		||||
metadata:
 | 
			
		||||
  name: bind-secondary-config
 | 
			
		||||
  namespace: bind
 | 
			
		||||
data:
 | 
			
		||||
  named.conf: |
 | 
			
		||||
    include "/etc/bind/named.conf.local";
 | 
			
		||||
@@ -36,6 +39,7 @@ metadata:
 | 
			
		||||
  name: bind-secondary
 | 
			
		||||
  namespace: bind
 | 
			
		||||
spec:
 | 
			
		||||
  revisionHistoryLimit: 0
 | 
			
		||||
  replicas: 3
 | 
			
		||||
  selector:
 | 
			
		||||
    matchLabels:
 | 
			
		||||
@@ -45,15 +49,9 @@ spec:
 | 
			
		||||
      labels:
 | 
			
		||||
        app: bind-secondary
 | 
			
		||||
    spec:
 | 
			
		||||
      volumes:
 | 
			
		||||
        - name: run
 | 
			
		||||
          emptyDir: {}
 | 
			
		||||
      containers:
 | 
			
		||||
        - name: bind-secondary
 | 
			
		||||
          image: internetsystemsconsortium/bind9:9.20
 | 
			
		||||
          volumeMounts:
 | 
			
		||||
            - mountPath: /run/named
 | 
			
		||||
              name: run
 | 
			
		||||
          workingDir: /var/bind
 | 
			
		||||
          command:
 | 
			
		||||
            - named
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@ apiVersion: apps/v1
 | 
			
		||||
kind: Deployment
 | 
			
		||||
metadata:
 | 
			
		||||
  name: external-dns-k-space
 | 
			
		||||
  namespace: bind
 | 
			
		||||
spec:
 | 
			
		||||
  revisionHistoryLimit: 0
 | 
			
		||||
  selector:
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@ apiVersion: apps/v1
 | 
			
		||||
kind: Deployment
 | 
			
		||||
metadata:
 | 
			
		||||
  name: external-dns-k6
 | 
			
		||||
  namespace: bind
 | 
			
		||||
spec:
 | 
			
		||||
  revisionHistoryLimit: 0
 | 
			
		||||
  selector:
 | 
			
		||||
@@ -41,31 +42,32 @@ apiVersion: externaldns.k8s.io/v1alpha1
 | 
			
		||||
kind: DNSEndpoint
 | 
			
		||||
metadata:
 | 
			
		||||
  name: k6
 | 
			
		||||
  namespace: bind
 | 
			
		||||
spec:
 | 
			
		||||
  endpoints:
 | 
			
		||||
  - dnsName: k6.ee
 | 
			
		||||
    recordTTL: 300
 | 
			
		||||
    recordType: SOA
 | 
			
		||||
    targets:
 | 
			
		||||
      - "ns1.k-space.ee. hostmaster.k-space.ee. (1 300 300 300 300)"
 | 
			
		||||
  - dnsName: k6.ee
 | 
			
		||||
    recordTTL: 300
 | 
			
		||||
    recordType: NS
 | 
			
		||||
    targets:
 | 
			
		||||
      - ns1.k-space.ee
 | 
			
		||||
      - ns2.k-space.ee
 | 
			
		||||
  - dnsName: ns1.k-space.ee
 | 
			
		||||
    recordTTL: 300
 | 
			
		||||
    recordType: A
 | 
			
		||||
    targets:
 | 
			
		||||
      - 193.40.103.2
 | 
			
		||||
  - dnsName: ns2.k-space.ee
 | 
			
		||||
    recordTTL: 300
 | 
			
		||||
    recordType: A
 | 
			
		||||
    targets:
 | 
			
		||||
      - 62.65.250.2
 | 
			
		||||
  - dnsName: k-space.ee
 | 
			
		||||
    recordTTL: 300
 | 
			
		||||
    recordType: MX
 | 
			
		||||
    targets:
 | 
			
		||||
      - 10 mail.k-space.ee
 | 
			
		||||
    - dnsName: k6.ee
 | 
			
		||||
      recordTTL: 300
 | 
			
		||||
      recordType: SOA
 | 
			
		||||
      targets:
 | 
			
		||||
        - "ns1.k-space.ee. hostmaster.k-space.ee. (1 300 300 300 300)"
 | 
			
		||||
    - dnsName: k6.ee
 | 
			
		||||
      recordTTL: 300
 | 
			
		||||
      recordType: NS
 | 
			
		||||
      targets:
 | 
			
		||||
        - ns1.k-space.ee
 | 
			
		||||
        - ns2.k-space.ee
 | 
			
		||||
    - dnsName: ns1.k-space.ee
 | 
			
		||||
      recordTTL: 300
 | 
			
		||||
      recordType: A
 | 
			
		||||
      targets:
 | 
			
		||||
        - 193.40.103.2
 | 
			
		||||
    - dnsName: ns2.k-space.ee
 | 
			
		||||
      recordTTL: 300
 | 
			
		||||
      recordType: A
 | 
			
		||||
      targets:
 | 
			
		||||
        - 62.65.250.2
 | 
			
		||||
    - dnsName: k-space.ee
 | 
			
		||||
      recordTTL: 300
 | 
			
		||||
      recordType: MX
 | 
			
		||||
      targets:
 | 
			
		||||
        - 10 mail.k-space.ee
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@ apiVersion: apps/v1
 | 
			
		||||
kind: Deployment
 | 
			
		||||
metadata:
 | 
			
		||||
  name: external-dns-kspace
 | 
			
		||||
  namespace: bind
 | 
			
		||||
spec:
 | 
			
		||||
  revisionHistoryLimit: 0
 | 
			
		||||
  selector:
 | 
			
		||||
@@ -18,8 +19,8 @@ spec:
 | 
			
		||||
        - name: external-dns
 | 
			
		||||
          image: registry.k8s.io/external-dns/external-dns:v0.14.2
 | 
			
		||||
          envFrom:
 | 
			
		||||
          - secretRef:
 | 
			
		||||
              name: tsig-secret
 | 
			
		||||
            - secretRef:
 | 
			
		||||
                name: tsig-secret
 | 
			
		||||
          args:
 | 
			
		||||
            - --events
 | 
			
		||||
            - --registry=noop
 | 
			
		||||
@@ -41,26 +42,27 @@ apiVersion: externaldns.k8s.io/v1alpha1
 | 
			
		||||
kind: DNSEndpoint
 | 
			
		||||
metadata:
 | 
			
		||||
  name: kspace
 | 
			
		||||
  namespace: bind
 | 
			
		||||
spec:
 | 
			
		||||
  endpoints:
 | 
			
		||||
  - dnsName: kspace.ee
 | 
			
		||||
    recordTTL: 300
 | 
			
		||||
    recordType: SOA
 | 
			
		||||
    targets:
 | 
			
		||||
      - "ns1.k-space.ee. hostmaster.k-space.ee. (1 300 300 300 300)"
 | 
			
		||||
  - dnsName: kspace.ee
 | 
			
		||||
    recordTTL: 300
 | 
			
		||||
    recordType: NS
 | 
			
		||||
    targets:
 | 
			
		||||
      - ns1.k-space.ee
 | 
			
		||||
      - ns2.k-space.ee
 | 
			
		||||
  - dnsName: ns1.k-space.ee
 | 
			
		||||
    recordTTL: 300
 | 
			
		||||
    recordType: A
 | 
			
		||||
    targets:
 | 
			
		||||
      - 193.40.103.2
 | 
			
		||||
  - dnsName: ns2.k-space.ee
 | 
			
		||||
    recordTTL: 300
 | 
			
		||||
    recordType: A
 | 
			
		||||
    targets:
 | 
			
		||||
      - 62.65.250.2
 | 
			
		||||
    - dnsName: kspace.ee
 | 
			
		||||
      recordTTL: 300
 | 
			
		||||
      recordType: SOA
 | 
			
		||||
      targets:
 | 
			
		||||
        - "ns1.k-space.ee. hostmaster.k-space.ee. (1 300 300 300 300)"
 | 
			
		||||
    - dnsName: kspace.ee
 | 
			
		||||
      recordTTL: 300
 | 
			
		||||
      recordType: NS
 | 
			
		||||
      targets:
 | 
			
		||||
        - ns1.k-space.ee
 | 
			
		||||
        - ns2.k-space.ee
 | 
			
		||||
    - dnsName: ns1.k-space.ee
 | 
			
		||||
      recordTTL: 300
 | 
			
		||||
      recordType: A
 | 
			
		||||
      targets:
 | 
			
		||||
        - 193.40.103.2
 | 
			
		||||
    - dnsName: ns2.k-space.ee
 | 
			
		||||
      recordTTL: 300
 | 
			
		||||
      recordType: A
 | 
			
		||||
      targets:
 | 
			
		||||
        - 62.65.250.2
 | 
			
		||||
 
 | 
			
		||||
@@ -4,55 +4,57 @@ kind: ClusterRole
 | 
			
		||||
metadata:
 | 
			
		||||
  name: external-dns
 | 
			
		||||
rules:
 | 
			
		||||
- apiGroups:
 | 
			
		||||
  - ""
 | 
			
		||||
  resources:
 | 
			
		||||
  - services
 | 
			
		||||
  - endpoints
 | 
			
		||||
  - pods
 | 
			
		||||
  - nodes
 | 
			
		||||
  verbs:
 | 
			
		||||
  - get
 | 
			
		||||
  - watch
 | 
			
		||||
  - list
 | 
			
		||||
- apiGroups:
 | 
			
		||||
  - extensions
 | 
			
		||||
  - networking.k8s.io
 | 
			
		||||
  resources:
 | 
			
		||||
  - ingresses
 | 
			
		||||
  verbs:
 | 
			
		||||
  - get
 | 
			
		||||
  - list
 | 
			
		||||
  - watch
 | 
			
		||||
- apiGroups:
 | 
			
		||||
  - externaldns.k8s.io
 | 
			
		||||
  resources:
 | 
			
		||||
  - dnsendpoints
 | 
			
		||||
  verbs:
 | 
			
		||||
  - get
 | 
			
		||||
  - watch
 | 
			
		||||
  - list
 | 
			
		||||
- apiGroups:
 | 
			
		||||
  - externaldns.k8s.io
 | 
			
		||||
  resources:
 | 
			
		||||
  - dnsendpoints/status
 | 
			
		||||
  verbs:
 | 
			
		||||
  - update
 | 
			
		||||
  - apiGroups:
 | 
			
		||||
      - ""
 | 
			
		||||
    resources:
 | 
			
		||||
      - services
 | 
			
		||||
      - endpoints
 | 
			
		||||
      - pods
 | 
			
		||||
      - nodes
 | 
			
		||||
    verbs:
 | 
			
		||||
      - get
 | 
			
		||||
      - watch
 | 
			
		||||
      - list
 | 
			
		||||
  - apiGroups:
 | 
			
		||||
      - extensions
 | 
			
		||||
      - networking.k8s.io
 | 
			
		||||
    resources:
 | 
			
		||||
      - ingresses
 | 
			
		||||
    verbs:
 | 
			
		||||
      - get
 | 
			
		||||
      - list
 | 
			
		||||
      - watch
 | 
			
		||||
  - apiGroups:
 | 
			
		||||
      - externaldns.k8s.io
 | 
			
		||||
    resources:
 | 
			
		||||
      - dnsendpoints
 | 
			
		||||
    verbs:
 | 
			
		||||
      - get
 | 
			
		||||
      - watch
 | 
			
		||||
      - list
 | 
			
		||||
  - apiGroups:
 | 
			
		||||
      - externaldns.k8s.io
 | 
			
		||||
    resources:
 | 
			
		||||
      - dnsendpoints/status
 | 
			
		||||
    verbs:
 | 
			
		||||
      - update
 | 
			
		||||
---
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: ServiceAccount
 | 
			
		||||
metadata:
 | 
			
		||||
  name: external-dns
 | 
			
		||||
  namespace: bind
 | 
			
		||||
---
 | 
			
		||||
apiVersion: rbac.authorization.k8s.io/v1
 | 
			
		||||
kind: ClusterRoleBinding
 | 
			
		||||
metadata:
 | 
			
		||||
  name: external-dns-viewer
 | 
			
		||||
  namespace: bind
 | 
			
		||||
roleRef:
 | 
			
		||||
  apiGroup: rbac.authorization.k8s.io
 | 
			
		||||
  kind: ClusterRole
 | 
			
		||||
  name: external-dns
 | 
			
		||||
subjects:
 | 
			
		||||
- kind: ServiceAccount
 | 
			
		||||
  name: external-dns
 | 
			
		||||
  namespace: bind
 | 
			
		||||
  - kind: ServiceAccount
 | 
			
		||||
    name: external-dns
 | 
			
		||||
    namespace: bind
 | 
			
		||||
 
 | 
			
		||||
@@ -1,18 +1,33 @@
 | 
			
		||||
# cert-manager
 | 
			
		||||
 | 
			
		||||
`cert-manager` is used to obtain TLS certificates from Let's Encrypt.
 | 
			
		||||
It uses DNS-01 challenge in conjunction with Bind primary
 | 
			
		||||
at `ns1.k-space.ee`.
 | 
			
		||||
Refer to the [Bind primary Ansible playbook](https://git.k-space.ee/k-space/ansible/src/branch/main/authoritative-nameserver.yaml) and
 | 
			
		||||
[Bind namespace on Kubernetes cluster](https://git.k-space.ee/k-space/kube/src/branch/master/bind)
 | 
			
		||||
for more details
 | 
			
		||||
 | 
			
		||||
Added manifest with:
 | 
			
		||||
# For user
 | 
			
		||||
 | 
			
		||||
Use `Certificate` CRD of cert-manager, refer to
 | 
			
		||||
[official documentation](https://cert-manager.io/docs/usage/certificate/).
 | 
			
		||||
 | 
			
		||||
To find usage examples in this repository use
 | 
			
		||||
`grep -r -A10 "^kind: Certificate" .`
 | 
			
		||||
 | 
			
		||||
# For administrator
 | 
			
		||||
 | 
			
		||||
Deployed with:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
curl -L https://github.com/jetstack/cert-manager/releases/download/v1.15.1/cert-manager.yaml -O
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
To update certificate issuer
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
kubectl apply -f cert-manager.yaml
 | 
			
		||||
kubectl apply -f issuer.yml
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
To update the issuer configuration or TSIG secret:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
kubectl apply -f default-issuer.yml
 | 
			
		||||
 kubectl -n cert-manager create secret generic tsig-secret \
 | 
			
		||||
    --from-literal=TSIG_SECRET=<secret>
 | 
			
		||||
```
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										21
									
								
								cert-manager/default-issuer.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								cert-manager/default-issuer.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
---
 | 
			
		||||
apiVersion: cert-manager.io/v1
 | 
			
		||||
kind: ClusterIssuer
 | 
			
		||||
metadata:
 | 
			
		||||
  name: default
 | 
			
		||||
  namespace: cert-manager
 | 
			
		||||
spec:
 | 
			
		||||
  acme:
 | 
			
		||||
    email: info@k-space.ee
 | 
			
		||||
    server: https://acme-v02.api.letsencrypt.org/directory
 | 
			
		||||
    privateKeySecretRef:
 | 
			
		||||
      name: example-issuer-account-key
 | 
			
		||||
    solvers:
 | 
			
		||||
      - dns01:
 | 
			
		||||
          rfc2136:
 | 
			
		||||
            nameserver: 193.40.103.2
 | 
			
		||||
            tsigKeyName: readwrite.
 | 
			
		||||
            tsigAlgorithm: HMACSHA512
 | 
			
		||||
            tsigSecretSecretRef:
 | 
			
		||||
              name: tsig-secret
 | 
			
		||||
              key: TSIG_SECRET
 | 
			
		||||
@@ -1,19 +0,0 @@
 | 
			
		||||
apiVersion: cert-manager.io/v1
 | 
			
		||||
kind: ClusterIssuer
 | 
			
		||||
metadata:
 | 
			
		||||
  name: default
 | 
			
		||||
spec:
 | 
			
		||||
  acme:
 | 
			
		||||
    email: info@k-space.ee
 | 
			
		||||
    server: https://acme-v02.api.letsencrypt.org/directory
 | 
			
		||||
    privateKeySecretRef:
 | 
			
		||||
      name: example-issuer-account-key
 | 
			
		||||
    solvers:
 | 
			
		||||
    - dns01:
 | 
			
		||||
        rfc2136:
 | 
			
		||||
          nameserver: 193.40.103.2
 | 
			
		||||
          tsigKeyName: acme.
 | 
			
		||||
          tsigAlgorithm: HMACSHA512
 | 
			
		||||
          tsigSecretSecretRef:
 | 
			
		||||
            name: tsig-secret
 | 
			
		||||
            key: TSIG_SECRET
 | 
			
		||||
		Reference in New Issue
	
	Block a user