在使用ingress 的時候。會遇到一個一個業務上的問題。什麼問題呢,ingress是鏈接外部網絡和k8s docker 內部網絡的一個應用。ingress 是根據service 來作到訪問的。若是你對k8s瞭解一點的話。你可能就知道他們的關係了。
這裏簡單的描述一下。
node上能夠有多個namespaces,一個namespace能夠有多個service,deployment,Daemonset等等。。
service的做用就是將pods 供網絡訪問(這裏指的是網絡,包括內部網絡和外部網絡),然而呢一個service 對應的是多個pod。pods而且是遊離的,不知道在那個node上面。
那麼問題來了。ingress是經過service來訪問pods的,可是具體的執行的是哪個pods,那這就鬼知道了,可是開發過程當中,不免會遇到這樣的場景,我就必須訪問service下的某一個節點。(咱們作的是區塊連的項目遇到了)
我使用的技巧是。
當頁面展現pods的信息的時候,會看到pod的內部網絡ip clusterIp,好就用它了
拿着這個clusertIp 去請求ingress的一個服務。這個服務是本身寫的一個。其完成的功能就是一個restclient
跨域的話,按道理來講是用不到的,可是我加了,這樣就作的比較通用了
配置文件就沒啥了
pom.xml文件
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
好了,打個鏡像吧
而後呢,經過docker login 登陸賬號
在而後呢
打鏡像 登陸linux系統(安裝過docket呀)
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD springboot-0.0.1-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
docker build -t api . //builde 就好了,成功後就能夠docker image看到了
docker tag api:latest muhaifeng/api-getway //而後給他打個標籤
docker push muhaifeng/api-getway:latest //將鏡像傳到的dockerhub上這個名稱好像是以本身的名字開頭,個人註冊的名字是muhaifeng
再在而後呢。看本身的dockerhub 就會出現本身打的鏡像 了
下面是個人帳戶下的信息
而後就搞定了。
部署一個Deployment 或DaemonSet(這個是每個節點都跑) 看我的喜歡和具體的場景