mirror of https://github.com/kubernetes/kops.git
Add CoreDNS support into DNS controller addon image.
This commit is contained in:
parent
4ace0f9ca5
commit
c5519c0009
|
@ -17,9 +17,12 @@ limitations under the License.
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
"github.com/spf13/pflag"
|
"github.com/spf13/pflag"
|
||||||
|
@ -30,7 +33,7 @@ import (
|
||||||
"k8s.io/client-go/kubernetes"
|
"k8s.io/client-go/kubernetes"
|
||||||
"k8s.io/client-go/rest"
|
"k8s.io/client-go/rest"
|
||||||
_ "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/aws/route53"
|
_ "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/aws/route53"
|
||||||
_ "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/coredns"
|
k8scoredns "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/coredns"
|
||||||
_ "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns"
|
_ "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -56,6 +59,9 @@ func main() {
|
||||||
watchIngress := true
|
watchIngress := true
|
||||||
flags.BoolVar(&watchIngress, "watch-ingress", watchIngress, "Configure hostnames found in ingress resources")
|
flags.BoolVar(&watchIngress, "watch-ingress", watchIngress, "Configure hostnames found in ingress resources")
|
||||||
|
|
||||||
|
dnsServer := ""
|
||||||
|
flag.StringVar(&dnsServer, "dns-server", dnsServer, "DNS Server")
|
||||||
|
|
||||||
// Trick to avoid 'logging before flag.Parse' warning
|
// Trick to avoid 'logging before flag.Parse' warning
|
||||||
flag.CommandLine.Parse([]string{})
|
flag.CommandLine.Parse([]string{})
|
||||||
|
|
||||||
|
@ -87,7 +93,15 @@ func main() {
|
||||||
// glog.Fatalf("error building extensions REST client: %v", err)
|
// glog.Fatalf("error building extensions REST client: %v", err)
|
||||||
//}
|
//}
|
||||||
|
|
||||||
dnsProvider, err := dnsprovider.GetDnsProvider(dnsProviderId, nil)
|
var file io.Reader
|
||||||
|
if dnsProviderId == k8scoredns.ProviderName {
|
||||||
|
var lines []string
|
||||||
|
lines = append(lines, "etcd-endpoints = "+dnsServer)
|
||||||
|
lines = append(lines, "zones = "+zones[0])
|
||||||
|
config := "[global]\n" + strings.Join(lines, "\n") + "\n"
|
||||||
|
file = bytes.NewReader([]byte(config))
|
||||||
|
}
|
||||||
|
dnsProvider, err := dnsprovider.GetDnsProvider(dnsProviderId, file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Errorf("Error initializing DNS provider %q: %v", dnsProviderId, err)
|
glog.Errorf("Error initializing DNS provider %q: %v", dnsProviderId, err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
|
|
|
@ -10,7 +10,7 @@ Here is a [list of requirements and tasks](https://docs.google.com/document/d/10
|
||||||
|
|
||||||
## Setting up DNS
|
## Setting up DNS
|
||||||
Since vSphere doesn't have built-in DNS service, we use CoreDNS to support the DNS requirement in vSphere provider. This requires the users to setup a CoreDNS server before creating a kubernetes cluster. Please follow the following instructions to setup.
|
Since vSphere doesn't have built-in DNS service, we use CoreDNS to support the DNS requirement in vSphere provider. This requires the users to setup a CoreDNS server before creating a kubernetes cluster. Please follow the following instructions to setup.
|
||||||
Before the support of CoreDNS becomes stable, use env parameter "VSPHERE_DNS=coredns" to enable using CoreDNS. Or else AWS Route53 will be the default DNS service. To use Route53, follow instructions on: https://github.com/vmware/kops/blob/vsphere-develop/docs/aws.md
|
**Before the support of CoreDNS becomes stable, use env parameter "VSPHERE_DNS=coredns"** to enable using CoreDNS. Or else AWS Route53 will be the default DNS service. To use Route53, follow instructions on: https://github.com/vmware/kops/blob/vsphere-develop/docs/aws.md
|
||||||
|
|
||||||
For now we hardcoded DNS zone to skydns.local. So your cluster name should have suffix skydns.local, for example: "mycluster.skydns.local"
|
For now we hardcoded DNS zone to skydns.local. So your cluster name should have suffix skydns.local, for example: "mycluster.skydns.local"
|
||||||
|
|
||||||
|
@ -56,6 +56,17 @@ ns1.ns.dns.skydns.local. 160 IN A 192.168.0.1
|
||||||
### Add DNS server information when create cluster
|
### Add DNS server information when create cluster
|
||||||
Add ```--dns=private --vsphere-coredns-server=http://[DNS server's IP]:2379``` into the ```kops create cluster``` command line.
|
Add ```--dns=private --vsphere-coredns-server=http://[DNS server's IP]:2379``` into the ```kops create cluster``` command line.
|
||||||
|
|
||||||
|
### Use CoreDNS supported DNS Controller
|
||||||
|
Information about DNS Controller can be found [here](https://github.com/kubernetes/kops/blob/master/dns-controller/README.md)
|
||||||
|
Currently the DNS Controller is an add-on container and the image is from kope/dns-controller.
|
||||||
|
Before the vSphere support is officially merged into upstream, we need to set up CoreDNS supported DNS controller manually.
|
||||||
|
```bash
|
||||||
|
DOCKER_REGISTRY=[your docker hub repo] make dns-controller-push
|
||||||
|
export VSPHERE_DNSCONTROLLER_IMAGE=[your docker hub repo]
|
||||||
|
make
|
||||||
|
kops create cluster ...
|
||||||
|
```
|
||||||
|
|
||||||
## Hacks
|
## Hacks
|
||||||
|
|
||||||
### Nodeup and protokube testing
|
### Nodeup and protokube testing
|
||||||
|
|
|
@ -28,7 +28,7 @@ spec:
|
||||||
hostNetwork: true
|
hostNetwork: true
|
||||||
containers:
|
containers:
|
||||||
- name: dns-controller
|
- name: dns-controller
|
||||||
image: kope/dns-controller:1.6.0
|
image: {{ DnsControllerImage }}:1.6.0
|
||||||
command:
|
command:
|
||||||
{{ range $arg := DnsControllerArgv }}
|
{{ range $arg := DnsControllerArgv }}
|
||||||
- "{{ $arg }}"
|
- "{{ $arg }}"
|
||||||
|
|
|
@ -36,6 +36,7 @@ import (
|
||||||
"k8s.io/kops/pkg/model/components"
|
"k8s.io/kops/pkg/model/components"
|
||||||
"k8s.io/kops/upup/pkg/fi"
|
"k8s.io/kops/upup/pkg/fi"
|
||||||
"k8s.io/kops/upup/pkg/fi/cloudup/gce"
|
"k8s.io/kops/upup/pkg/fi/cloudup/gce"
|
||||||
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
"text/template"
|
"text/template"
|
||||||
)
|
)
|
||||||
|
@ -95,6 +96,7 @@ func (tf *TemplateFunctions) AddTo(dest template.FuncMap) {
|
||||||
// TODO: Only for GCE?
|
// TODO: Only for GCE?
|
||||||
dest["EncodeGCELabel"] = gce.EncodeGCELabel
|
dest["EncodeGCELabel"] = gce.EncodeGCELabel
|
||||||
|
|
||||||
|
dest["DnsControllerImage"] = tf.DnsControllerImage
|
||||||
}
|
}
|
||||||
|
|
||||||
// SharedVPC is a simple helper function which makes the templates for a shared VPC clearer
|
// SharedVPC is a simple helper function which makes the templates for a shared VPC clearer
|
||||||
|
@ -137,6 +139,7 @@ func (tf *TemplateFunctions) DnsControllerArgv() ([]string, error) {
|
||||||
argv = append(argv, "--dns=google-clouddns")
|
argv = append(argv, "--dns=google-clouddns")
|
||||||
case fi.CloudProviderVSphere:
|
case fi.CloudProviderVSphere:
|
||||||
argv = append(argv, "--dns=coredns")
|
argv = append(argv, "--dns=coredns")
|
||||||
|
argv = append(argv, "--dns-server="+*tf.cluster.Spec.CloudConfig.VSphereCoreDNSServer)
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("unhandled cloudprovider %q", tf.cluster.Spec.CloudProvider)
|
return nil, fmt.Errorf("unhandled cloudprovider %q", tf.cluster.Spec.CloudProvider)
|
||||||
|
@ -160,3 +163,17 @@ func (tf *TemplateFunctions) DnsControllerArgv() ([]string, error) {
|
||||||
|
|
||||||
return argv, nil
|
return argv, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: this is a work-around before vSphere support is getting merged into upstream kops.
|
||||||
|
// To use CoreDNS supported DNS Controller:
|
||||||
|
// 1. DOCKER_REGISTRY=[your docker hub repo] make dns-controller-push
|
||||||
|
// 2. export VSPHERE_DNSCONTROLLER_IMAGE=[your docker hub repo]
|
||||||
|
// 3. make kops and create/apply cluster
|
||||||
|
func (tf *TemplateFunctions) DnsControllerImage() (string, error) {
|
||||||
|
image := os.Getenv("VSPHERE_DNSCONTROLLER_IMAGE")
|
||||||
|
if fi.CloudProviderID(tf.cluster.Spec.CloudProvider) != fi.CloudProviderVSphere || image == "" {
|
||||||
|
return "kope/dns-controller", nil
|
||||||
|
} else {
|
||||||
|
return image, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue