Now battling with nameservers in container
This commit is contained in:
parent
0d44d8937e
commit
8fde28b44c
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"terminal.explorerKind": "integrated"
|
||||||
|
}
|
||||||
@ -34,6 +34,7 @@ RUN chown -R root:root /root/.bashrc && \
|
|||||||
RUN apk add --no-cache alpine-conf && \
|
RUN apk add --no-cache alpine-conf && \
|
||||||
setup-timezone -z Africa/Johannesburg
|
setup-timezone -z Africa/Johannesburg
|
||||||
# chmod 0644 /etc/krb5.conf
|
# chmod 0644 /etc/krb5.conf
|
||||||
|
COPY config/resolv.sh /etc/resolv.conf
|
||||||
|
|
||||||
ENV RUNNING_IN_DOCKER true
|
ENV RUNNING_IN_DOCKER true
|
||||||
ENV DEBIAN_FRONTEND=noninteractive
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|||||||
16
Makefile
16
Makefile
@ -12,7 +12,7 @@ OUT := $(shell pwd)/_out
|
|||||||
|
|
||||||
KUBEBUILDER_VERSION=1.28.0
|
KUBEBUILDER_VERSION=1.28.0
|
||||||
|
|
||||||
HELM_FILES := $(shell find deploy/sthome-webhook)
|
HELM_FILES := $(shell find "deploy/sthome-webhook")
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
go mod tidy
|
go mod tidy
|
||||||
@ -52,17 +52,21 @@ build: rendered-manifest.yaml dependencies bin/buildversion.exe version.txt
|
|||||||
docker build --pull --rm -f "Dockerfile" -t "stuurmcp/$(IMAGE_NAME):latest" -t "stuurmcp/$(IMAGE_NAME):$(shell head -n 1 version.txt)" "."
|
docker build --pull --rm -f "Dockerfile" -t "stuurmcp/$(IMAGE_NAME):latest" -t "stuurmcp/$(IMAGE_NAME):$(shell head -n 1 version.txt)" "."
|
||||||
docker image push "docker.io/stuurmcp/$(IMAGE_NAME):$(shell head -n 1 version.txt)"
|
docker image push "docker.io/stuurmcp/$(IMAGE_NAME):$(shell head -n 1 version.txt)"
|
||||||
docker image push "docker.io/stuurmcp/$(IMAGE_NAME):latest"
|
docker image push "docker.io/stuurmcp/$(IMAGE_NAME):latest"
|
||||||
helm package deploy/sthome-webhook -d //truenas/Shared_data/Chris/clusterissuer/charts/
|
helm package \
|
||||||
|
-n ix-sthome-webhook2\
|
||||||
.PHONY: rendered-manifest.yaml
|
--version $(shell head -n 1 version.txt) \
|
||||||
rendered-manifest.yaml: $(OUT)/rendered-manifest.yaml
|
deploy/sthome-webhook \
|
||||||
|
-d //truenas/Shared_data/Chris/clusterissuer/charts/
|
||||||
|
|
||||||
$(OUT)/rendered-manifest.yaml: $(HELM_FILES) | $(OUT)
|
$(OUT)/rendered-manifest.yaml: $(HELM_FILES) | $(OUT)
|
||||||
helm template \
|
helm template \
|
||||||
sthome-webhook -n ix-cert-manager\
|
sthome-webhook -n ix-sthome-webhook2\
|
||||||
--set image.repository=$(IMAGE_NAME) \
|
--set image.repository=$(IMAGE_NAME) \
|
||||||
--set image.tag=$(shell head -n 1 version.txt) \
|
--set image.tag=$(shell head -n 1 version.txt) \
|
||||||
deploy/sthome-webhook > $@
|
deploy/sthome-webhook > $@
|
||||||
|
|
||||||
|
.PHONY: rendered-manifest.yaml
|
||||||
|
rendered-manifest.yaml: $(OUT)/rendered-manifest.yaml
|
||||||
|
|
||||||
_test $(OUT) _test/kubebuilder-$(KUBEBUILDER_VERSION)-$(OS)-$(ARCH):
|
_test $(OUT) _test/kubebuilder-$(KUBEBUILDER_VERSION)-$(OS)-$(ARCH):
|
||||||
mkdir -p $@
|
mkdir -p $@
|
||||||
|
|||||||
@ -2,7 +2,6 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
@ -10,8 +9,8 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
chartfile = "./deploy/sthome-webhook/Chart.yaml"
|
//chartfile = "./deploy/sthome-webhook/Chart.yaml"
|
||||||
valuesfile = "./deploy/sthome-webhook/values.yaml"
|
//valuesfile = "./deploy/sthome-webhook/values.yaml"
|
||||||
tagprefix = " tag: "
|
tagprefix = " tag: "
|
||||||
vertxtfile = "./version.txt"
|
vertxtfile = "./version.txt"
|
||||||
apiVersion = "v1"
|
apiVersion = "v1"
|
||||||
@ -20,8 +19,8 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
buildTime string
|
buildTime string
|
||||||
appVersion string
|
//appVersion string
|
||||||
longversion string
|
longversion string
|
||||||
multilineversion string
|
multilineversion string
|
||||||
)
|
)
|
||||||
@ -45,16 +44,17 @@ func main() {
|
|||||||
bNum, _ := strconv.Atoi(vLines[2])
|
bNum, _ := strconv.Atoi(vLines[2])
|
||||||
bNum++
|
bNum++
|
||||||
longversion = version + "." + fmt.Sprint(bNum)
|
longversion = version + "." + fmt.Sprint(bNum)
|
||||||
appVersion = "v" + longversion
|
//appVersion = "v" + longversion
|
||||||
// Generate a single string to write back to the file
|
// Generate a single string to write back to the file
|
||||||
multilineversion = longversion + "\n" + buildTime + "\n" + fmt.Sprint(bNum)
|
multilineversion = longversion + "\n" + buildTime + "\n" + fmt.Sprint(bNum)
|
||||||
chartStr := "apiVersion: " + apiVersion + "\nappVersion: " + appVersion + "\ndescription: " + description + "\nname: " + name + "\nversion: " + longversion + "\n"
|
//chartStr := "apiVersion: " + apiVersion + "\nappVersion: " + appVersion + "\ndescription: " + description + "\nname: " + name + "\nversion: " + longversion + "\n"
|
||||||
// Write the data back to the file.
|
// Write the data back to the file.
|
||||||
_ = os.WriteFile(vertxtfile, []byte(multilineversion), 0777)
|
_ = os.WriteFile(vertxtfile, []byte(multilineversion), 0777)
|
||||||
_ = os.WriteFile(chartfile, []byte(chartStr), 0777)
|
//_ = os.WriteFile(chartfile, []byte(chartStr), 0777)
|
||||||
replacetxtfilelines(valuesfile, tagprefix, tagprefix+longversion)
|
//replacetxtfilelines(valuesfile, tagprefix, tagprefix+longversion)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
func replacetxtfilelines(filename string, textLinePrefix string, replacetext string) {
|
func replacetxtfilelines(filename string, textLinePrefix string, replacetext string) {
|
||||||
input, err := os.ReadFile(filename)
|
input, err := os.ReadFile(filename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -74,3 +74,4 @@ func replacetxtfilelines(filename string, textLinePrefix string, replacetext str
|
|||||||
log.Fatalln(err)
|
log.Fatalln(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|||||||
4
config/resolv.sh
Normal file
4
config/resolv.sh
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
search ix-sthome-webhook2.svc.cluster.local svc.cluster.local cluster.local sthome.lan
|
||||||
|
nameserver 10.0.0.15
|
||||||
|
nameserver 172.17.0.10
|
||||||
|
options ndots:5
|
||||||
@ -1,5 +1,5 @@
|
|||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
appVersion: v0.0.5-alpha.24
|
appVersion: v0.0.5-alpha.33
|
||||||
description: Cert-Manager webhook for sthome
|
description: Cert-Manager webhook for sthome
|
||||||
name: sthome-webhook
|
name: sthome-webhook
|
||||||
version: 0.0.5-alpha.24
|
version: 0.0.5-alpha.33
|
||||||
|
|||||||
@ -31,6 +31,13 @@ spec:
|
|||||||
- --tls-cert-file=/tls/tls.crt
|
- --tls-cert-file=/tls/tls.crt
|
||||||
- --tls-private-key-file=/tls/tls.key
|
- --tls-private-key-file=/tls/tls.key
|
||||||
- --secure-port=8443
|
- --secure-port=8443
|
||||||
|
{{- range $key, $value := .Values.extraArgs }}
|
||||||
|
{{- if $value }}
|
||||||
|
- --{{ $key }}={{ $value }}
|
||||||
|
{{- else }}
|
||||||
|
- --{{ $key }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
env:
|
env:
|
||||||
- name: GROUP_NAME
|
- name: GROUP_NAME
|
||||||
value: {{ .Values.groupName | quote }}
|
value: {{ .Values.groupName | quote }}
|
||||||
|
|||||||
@ -31,7 +31,7 @@ clusterIssuer:
|
|||||||
image:
|
image:
|
||||||
repository: stuurmcp/cert-manager-webhook-sthome
|
repository: stuurmcp/cert-manager-webhook-sthome
|
||||||
#repository: wstat.sthome.net:5000/cert-manager-webhook-sthome
|
#repository: wstat.sthome.net:5000/cert-manager-webhook-sthome
|
||||||
tag: 0.0.5-alpha.24
|
tag: 0.0.5-alpha.33
|
||||||
#pullPolicy should be IfNotPresent. Set to Always for testing purposes
|
#pullPolicy should be IfNotPresent. Set to Always for testing purposes
|
||||||
pullPolicy: IfNotPresent
|
pullPolicy: IfNotPresent
|
||||||
|
|
||||||
@ -41,6 +41,10 @@ imageCredentials:
|
|||||||
nameOverride: ""
|
nameOverride: ""
|
||||||
fullnameOverride: ""
|
fullnameOverride: ""
|
||||||
|
|
||||||
|
extraArgs:
|
||||||
|
# dns1: 192.168.2.4
|
||||||
|
# dns2: 10.0.0.15
|
||||||
|
|
||||||
replicaCount: 1
|
replicaCount: 1
|
||||||
|
|
||||||
pki:
|
pki:
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package dns
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"fmt"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
@ -21,6 +22,7 @@ func Execute(shell string, arg ...string) (bool, error) {
|
|||||||
}
|
}
|
||||||
if errb.String() != "" {
|
if errb.String() != "" {
|
||||||
klog.Errorf("stderr:\n%s============\n", errb.String())
|
klog.Errorf("stderr:\n%s============\n", errb.String())
|
||||||
|
return false, fmt.Errorf("stderr:\n%q", errb.String())
|
||||||
}
|
}
|
||||||
klog.Infof("Script returned success\n")
|
klog.Infof("Script returned success\n")
|
||||||
return true, nil
|
return true, nil
|
||||||
|
|||||||
@ -92,8 +92,9 @@ func (loc *LocalDNSProviderSolver) Present(ch *v1alpha1.ChallengeRequest) error
|
|||||||
err = loc.Check(ch.DNSName, ch.Key)
|
err = loc.Check(ch.DNSName, ch.Key)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
klog.Infof("Check for propagation failed: %s", err)
|
klog.Infof("Check for propagation failed: %s", err)
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
success, _ := Execute(
|
success, err := Execute(
|
||||||
Shell,
|
Shell,
|
||||||
AcmeAuthCmd,
|
AcmeAuthCmd,
|
||||||
"set",
|
"set",
|
||||||
@ -105,7 +106,7 @@ func (loc *LocalDNSProviderSolver) Present(ch *v1alpha1.ChallengeRequest) error
|
|||||||
//"-v",
|
//"-v",
|
||||||
)
|
)
|
||||||
klog.Infof("Execute set TXT returned success: %t\n", success)
|
klog.Infof("Execute set TXT returned success: %t\n", success)
|
||||||
return nil
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// CleanUp should delete the relevant TXT record from the DNS provider console.
|
// CleanUp should delete the relevant TXT record from the DNS provider console.
|
||||||
@ -117,7 +118,7 @@ func (loc *LocalDNSProviderSolver) Present(ch *v1alpha1.ChallengeRequest) error
|
|||||||
func (loc *LocalDNSProviderSolver) CleanUp(ch *v1alpha1.ChallengeRequest) error {
|
func (loc *LocalDNSProviderSolver) CleanUp(ch *v1alpha1.ChallengeRequest) error {
|
||||||
//domainName := extractDomainName(ch.ResolvedZone)
|
//domainName := extractDomainName(ch.ResolvedZone)
|
||||||
//localip := GetOutboundIP(Dnsserver_net)
|
//localip := GetOutboundIP(Dnsserver_net)
|
||||||
success, _ := Execute(
|
success, err := Execute(
|
||||||
Shell,
|
Shell,
|
||||||
AcmeAuthCmd,
|
AcmeAuthCmd,
|
||||||
"unset",
|
"unset",
|
||||||
@ -129,7 +130,7 @@ func (loc *LocalDNSProviderSolver) CleanUp(ch *v1alpha1.ChallengeRequest) error
|
|||||||
//"-v",
|
//"-v",
|
||||||
)
|
)
|
||||||
klog.Infof("Execute unset TXT returned success: %t\n", success)
|
klog.Infof("Execute unset TXT returned success: %t\n", success)
|
||||||
return nil
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize will be called when the webhook first starts.
|
// Initialize will be called when the webhook first starts.
|
||||||
|
|||||||
@ -110,15 +110,19 @@ func checkDNSPropagation(fqdn, value string, nameservers []string,
|
|||||||
|
|
||||||
var err error
|
var err error
|
||||||
fqdn, err = followCNAMEs(fqdn, nameservers)
|
fqdn, err = followCNAMEs(fqdn, nameservers)
|
||||||
|
//klog.Infof("PreCheckDNS: followCNAMEs returned fqdn: %s, err: %s", fqdn, err)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if !useAuthoritative {
|
if !useAuthoritative {
|
||||||
return checkAuthoritativeNss(fqdn, value, nameservers)
|
var success bool
|
||||||
|
success, err = checkAuthoritativeNss(fqdn, value, nameservers)
|
||||||
|
//klog.Infof("PreCheckDNS: checkAuthoritativeNss returned success: %t, err: %s", success, err)
|
||||||
|
return success, err
|
||||||
}
|
}
|
||||||
|
|
||||||
authoritativeNss, err := lookupNameservers(fqdn, nameservers)
|
authoritativeNss, err := lookupNameservers(fqdn, nameservers)
|
||||||
|
//klog.Infof("PreCheckDNS: lookupNameservers returned authoritativeNss: %s, err: %s", authoritativeNss, err)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
@ -133,18 +137,26 @@ func checkDNSPropagation(fqdn, value string, nameservers []string,
|
|||||||
func checkAuthoritativeNss(fqdn, value string, nameservers []string) (bool, error) {
|
func checkAuthoritativeNss(fqdn, value string, nameservers []string) (bool, error) {
|
||||||
for _, ns := range nameservers {
|
for _, ns := range nameservers {
|
||||||
r, err := DNSQuery(fqdn, dns.TypeTXT, []string{ns}, true)
|
r, err := DNSQuery(fqdn, dns.TypeTXT, []string{ns}, true)
|
||||||
|
//klog.Infof("checkAuthoritativeNss: DNSQuery returned \nr: %s, \nerr: %s", r, err)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
klog.Infof("checkAuthoritativeNss: DNSQuery failed")
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
klog.Infof("checkAuthoritativeNss: DNSQuery succeeded with r.Rcode: %d", r.Rcode)
|
||||||
// NXDomain response is not really an error, just waiting for propagation to happen
|
// NXDomain response is not really an error, just waiting for propagation to happen
|
||||||
if !(r.Rcode == dns.RcodeSuccess || r.Rcode == dns.RcodeNameError) {
|
if !(r.Rcode == dns.RcodeSuccess || r.Rcode == dns.RcodeNameError) {
|
||||||
|
//klog.Errorf("checkAuthoritativeNss: NS %s returned %s for %s", ns, dns.RcodeToString[r.Rcode], fqdn)
|
||||||
return false, fmt.Errorf("NS %s returned %s for %s", ns, dns.RcodeToString[r.Rcode], fqdn)
|
return false, fmt.Errorf("NS %s returned %s for %s", ns, dns.RcodeToString[r.Rcode], fqdn)
|
||||||
}
|
}
|
||||||
|
|
||||||
klog.Infof("Looking up TXT records for %q", fqdn)
|
klog.Infof("Looking up TXT records for %q, should be = %s", fqdn, value)
|
||||||
|
//klog.Infof("checkAuthoritativeNss: r.Answer: %s", r.Answer)
|
||||||
var found bool
|
var found bool
|
||||||
|
var i = 0
|
||||||
for _, rr := range r.Answer {
|
for _, rr := range r.Answer {
|
||||||
|
i++
|
||||||
|
txt1, ok1 := rr.(*dns.TXT)
|
||||||
|
klog.Infof("checkAuthoritativeNss: Compare[%d]: ok: %t, query: %s, value: %s", i, ok1, txt1.Txt, value)
|
||||||
if txt, ok := rr.(*dns.TXT); ok {
|
if txt, ok := rr.(*dns.TXT); ok {
|
||||||
if strings.Join(txt.Txt, "") == value {
|
if strings.Join(txt.Txt, "") == value {
|
||||||
found = true
|
found = true
|
||||||
@ -394,7 +406,7 @@ func lookupNameservers(fqdn string, nameservers []string) ([]string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(authoritativeNss) > 0 {
|
if len(authoritativeNss) > 0 {
|
||||||
klog.Infof("Returning authoritative nameservers [%s]", strings.Join(authoritativeNss, ", "))
|
//klog.Infof("Returning authoritative nameservers [%s]", strings.Join(authoritativeNss, ", "))
|
||||||
return authoritativeNss, nil
|
return authoritativeNss, nil
|
||||||
}
|
}
|
||||||
return nil, fmt.Errorf("could not determine authoritative nameservers for %q", fqdn)
|
return nil, fmt.Errorf("could not determine authoritative nameservers for %q", fqdn)
|
||||||
|
|||||||
@ -1,3 +1,3 @@
|
|||||||
0.0.5-alpha.24
|
0.0.5-alpha.37
|
||||||
20240409-1838
|
20240411-0048
|
||||||
24
|
37
|
||||||
Loading…
Reference in New Issue
Block a user