centos7下kubernetes(14。kubernetes-DNS访问service)
我们在部署kubernetes时,会自动部署dns组件,其作用是通过dns解析的方法访问service
coredns是一个DNS服务器,每当有新的service被创建,kube-dns会添加该service的dns记录。cluster中的pod可以通过{service_name.namespace_name:port}访问service
比如我们接着上一个实验,通过httpd-svc.default访问service httpd-svc
我们在一个临时的pod里面验证了DNS的有效性。
这个临时的pod与httpd-svc同属于一个default namespace,可以忽略default直接用httpd-svc访问service
要访问其他的namespace中的service,就必须带上namespace了
kubectl get namespace 查看已有的namespace
在 kube-public
中部署 Service httpd2-svc
,配置如下
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: httpd2
namespace: kube-public
spec:
replicas: 3
template:
metadata:
labels:
run: httpd2
spec:
containers:
- name: httpd2
image: httpd
ports:
- containerPort: 80
kind: Deployment
metadata:
name: httpd2
namespace: kube-public
spec:
replicas: 3
template:
metadata:
labels:
run: httpd2
spec:
containers:
- name: httpd2
image: httpd
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: httpd2-svc
namespace: kube-public
spec:
selector:
run: httpd2
ports:
- protocol: TCP
port: 8080
targetPort: 80
apiVersion: v1
kind: Service
metadata:
name: httpd2-svc
namespace: kube-public
spec:
selector:
run: httpd2
ports:
- protocol: TCP
port: 8080
targetPort: 80
通过namespace:kube-public指定资源所属namespace。
多个资源可以在同一个yml文件中定义,用 --- 分割。
创建资源 kubectl apply -f httpd2.yml
一定要注意yml文件的格式,一个字母都不能错
查看kube-public的service
kubectl get service --namespace=kube-public
现在在临时的pod中访问httpd2-svc
因为同属于不同namespace,所以必须使用httpd2-svc.kube-public 才能访问到