背景:
在k8s中用到的比较到多的是ClusterIP和NodePort类型的service,externalIPs则很少使用。我们现在了解一下其用法和它的一些优缺点。
官方定义:
如果有路由到一个或多个集群节点的外部 IP,则可以在这些 IP 上公开 Kubernetes 服务。在服务端口上使用外部 IP(作为目标 IP)进入集群的流量将被路由到其中一个服务端点。 不受 Kubernetes 管理,由集群管理员负责。
如何使用externalIPs
本实例预配了 2 个 VM。 分别为 Kubernetes 主节点,IP 为 1.2.4.120。 Kubernetes worker,IP 为 1.2.4.114。k3s-external-ip-master
k3s-external-ip-worker
部署nginx和httpd服务
$ kubectl create deployment nginx --image=nginx $ kubectl create deployment httpd --image=httpd
可以看到
$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-86c57db685-fzxn5 1/1 Running 0 22s httpd-7bddd4bd85-zk8ks 1/1 Running 0 16s
编写service配置文件
$ cat << EOF > nginx-service.yaml apiVersion: v1 kind: Service metadata:name: nginx-service spec:selector:app: nginxports:- name: httpprotocol: TCPport: 80targetPort: 80externalIPs:- 1.2.4.114 EOF
$ cat << EOF > httpd-service.yaml apiVersion: v1 kind: Service metadata:name: httpd-service spec:selector:app: httpdports:- name: httpprotocol: TCPport: 80targetPort: 80externalIPs:- 1.2.4.120 EOF
部署这两个service
$ kubectl create -f nginx-service.yaml $ kubectl create -f httpd-service.yaml
查看service
$ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 18m httpd-service ClusterIP 10.43.240.149 1.2.4.120 80/TCP 32s nginx-service ClusterIP 10.43.13.149 1.2.4.114 80/TCP 26s
调用查看httpd服务
$ curl -i 1.2.4.120 HTTP/1.1 200 OK Date: Fri, 20 Dec 2019 03:36:23 GMT Server: Apache/2.4.41 (Unix) <------ Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT ETag: "2d-432a5e4a73a80" Accept-Ranges: bytes Content-Length: 45 Content-Type: text/html<html><body><h1>It works!</h1></body></html>
调用查看nginx服务
$ curl -i 1.2.4.114 HTTP/1.1 200 OK Server: nginx/1.17.6 <------ Date: Fri, 20 Dec 2019 03:36:01 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Tue, 19 Nov 2019 12:50:08 GMT Connection: keep-alive ETag: "5dd3e500-264" Accept-Ranges: bytes<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> ....
总结:
优点:是对外暴露访问地址相较于NodePort的访问地址自控程度高
缺点:不具有高可用的能力