如何通过vm的名称访问GCP中的kubernetes服务?

时间:2019-06-18 16:49:13

标签: networking kubernetes google-cloud-platform hostname

我在gcp中托管了一个负载均衡kubernetes服务,该服务在名称空间myNamespace中称为myService。我给它加上了“ myKubeTag”标签。我也有一个正在运行的虚拟机,它本身正在运行一个想要与myService通信的docker容器。我创建了一个防火墙规则,以允许两者之间的TCP通信。

我可以将服务的IP地址提供给vm进行连接,我想知道的是,如何设置名称代理,以便vm可以按名称进行引用?

工作负载和服务从掌舵启动,如下所示:

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: {{ template "app.prefix" . }}
spec:
  selector:
    matchLabels:
      name: {{ template "app.prefix" . }}
  template:
    metadata:
      labels:
        name: {{ template "app.prefix" . }}
    spec:
      nodeSelector:
        target_workload: {{ .Values.prefix }}-myApp
      containers:
        - name: myApp
          image: {{ .Values.myApp.image }}
      tolerations:
        - key: "target_workload"
          operator: "Equal"
          value: {{ .Values.prefix }}-myApp
          effect: "NoSchedule"

---

apiVersion: v1
kind: Service
metadata:
  name: {{ template "app.prefix" . }}
spec:
  ports:
    - name: http
      protocol: TCP
      port: 8080
      targetPort: 8080
  type: LoadBalancer
  selector:
    role: {{ template "app.prefix" . }}

我已经准备好以下内容: https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/

这使我认为主机名将为myService.myNamespace.sxc.cluster-domain.myCluster,但是在我的VM上运行的容器会引发Unknown host异常。

1 个答案:

答案 0 :(得分:0)

一旦您在GCP内使用服务type: LoadBalancer,它将自动为您分配一个ExternalIP:

$ kubectl get svc
NAME         TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)        AGE
kubernetes   ClusterIP      10.12.0.1      <none>         443/TCP        162m
nginx-svc    LoadBalancer   10.12.15.100   35.232.130.5   80:30826/TCP   8m27s

在此示例中,域看起来像以下5.130.232.35.bc.googleusercontent.com

我已经通过在nginx吊舱内部进行nslookup进行了检查

$ kubectl exec nginx-deployment-85c9bf4fd7-h5tt9 nslookup 35.232.130.5
Server:         10.12.0.10
Address:        10.12.0.10#53

Non-authoritative answer:
5.130.232.35.in-addr.arpa       name = 5.130.232.35.bc.googleusercontent.com.

请记住,默认nginx映像中没有nslookup,因此您需要安装它。

希望这就是您想要的。